如何将卢比的印度卢比中的数字转换成单词,并像1110.56 C#一样在单词,一千一百十卢比和五十六个paise中转换。 [英] How to convert number to words in indian rupees in rupee and paise like 1110.56 C# in word like, one thousand one hundred ten rupees and fifty six paise.

查看:93
本文介绍了如何将卢比的印度卢比中的数字转换成单词,并像1110.56 C#一样在单词,一千一百十卢比和五十六个paise中转换。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

if (textAmount.Text != "")
LabelNoToWord.Text = (changeNumericToWords(Convert.ToInt32(textAmount.Text)));

        }
        public String changeNumericToWords(double numb)
        {
            String num = numb.ToString();
            return changeToWords(num, false);
        }
        public String changeCurrencyToWords(String numb)
        {
            return changeToWords(numb, true);
        }
        public String changeNumericToWords(String numb)
        {
            return changeToWords(numb, false);
        }
        public String changeCurrencyToWords(double numb)
        {
            return changeToWords(numb.ToString(), true);
        }
        public String changeToWords(String numb, bool isCurrency)
        {
            String val = "", wholeNo = numb, points = "", andStr = "", pointStr = "";
            String endStr = (isCurrency) ? ("Only") : ("");
            try
            {
                int decimalPlace = numb.IndexOf(".");
                if (decimalPlace > 0)
                {
                    wholeNo = numb.Substring(0, decimalPlace);
                    points = numb.Substring(decimalPlace + 1);
                    if (Convert.ToInt32(points) > 0)
                    {
                        andStr = (isCurrency) ? ("and") : ("point");// just to separate whole numbers from points/cents
                        endStr = (isCurrency) ? ("Cents " + endStr) : ("");
                        pointStr = translateCents(points);
                    }
                }
                val = String.Format("{0} {1}{2} {3}", translateWholeNumber(wholeNo).Trim(), andStr, pointStr, endStr);
            }
            catch { ;}
            return val;
        }
        private String translateWholeNumber(String number)
        {
            string word = "";
            try
            {
                bool beginsZero = false;//tests for 0XX
                bool isDone = false;//test if already translated
                double dblAmt = (Convert.ToDouble(number));
                //if ((dblAmt > 0) && number.StartsWith("0"))
                if (dblAmt > 0)
                {//test for zero or digit zero in a nuemric
                    beginsZero = number.StartsWith("0");

                    int numDigits = number.Length;
                    int pos = 0;//store digit grouping
                    String place = "";//digit grouping name:hundres,thousand,etc...
                    switch (numDigits)
                    {
                        case 1://ones' range
                            word = ones(number);
                            isDone = true;
                            break;
                        case 2://tens' range
                            word = tens(number);
                            isDone = true;
                            break;
                        case 3://hundreds' range
                            pos = (numDigits % 3) + 1;
                            place = " Hundred ";
                            break;
                        case 4://thousands' range
                        case 5:
                        case 6:
                            pos = (numDigits % 4) + 1;
                            place = " Thousand ";
                            break;
                        case 7://millions' range
                        case 8:
                        case 9:
                            pos = (numDigits % 7) + 1;
                            place = " Million ";
                            break;
                        case 10://Billions's range
                            pos = (numDigits % 10) + 1;
                            place = " Billion ";
                            break;
                        //add extra case options for anything above Billion...
                        default:
                            isDone = true;
                            break;
                    }
                    if (!isDone)
                    {//if transalation is not done, continue...(Recursion comes in now!!)
                        word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
                        //check for trailing zeros
                        if (beginsZero) word = " and " + word.Trim();
                    }
                    //ignore digit grouping names
                    if (word.Trim().Equals(place.Trim())) word = "";
                }
            }
            catch { ;}
            return word.Trim();
        }
        private String tens(String digit)
        {
            int digt = Convert.ToInt32(digit);
            String name = null;
            switch (digt)
            {
                case 10:
                    name = "Ten";
                    break;
                case 11:
                    name = "Eleven";
                    break;
                case 12:
                    name = "Twelve";
                    break;
                case 13:
                    name = "Thirteen";
                    break;
                case 14:
                    name = "Fourteen";
                    break;
                case 15:
                    name = "Fifteen";
                    break;
                case 16:
                    name = "Sixteen";
                    break;
                case 17:
                    name = "Seventeen";
                    break;
                case 18:
                    name = "Eighteen";
                    break;
                case 19:
                    name = "Nineteen";
                    break;
                case 20:
                    name = "Twenty";
                    break;
                case 30:
                    name = "Thirty";
                    break;
                case 40:
                    name = "Fourty";
                    break;
                case 50:
                    name = "Fifty";
                    break;
                case 60:
                    name = "Sixty";
                    break;
                case 70:
                    name = "Seventy";
                    break;
                case 80:
                    name = "Eighty";
                    break;
                case 90:
                    name = "Ninety";
                    break;
                default:
                    if (digt > 0)
                    {
                        name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));
                    }
                    break;
            }
            return name;
        }
        private String ones(String digit)
        {
            int digt = Convert.ToInt32(digit);
            String name = "";
            switch (digt)
            {
                case 1:
                    name = "One";
                    break;
                case 2:
                    name = "Two";
                    break;
                case 3:
                    name = "Three";
                    break;
                case 4:
                    name = "Four";
                    break;
                case 5:
                    name = "Five";
                    break;
                case 6:
                    name = "Six";
                    break;
                case 7:
                    name = "Seven";
                    break;
                case 8:
                    name = "Eight";
                    break;
                case 9:
                    name = "Nine";
                    break;
            }
            return name;
        }
        private String translateCents(String cents)
        {
            String cts = "", digit = "", engOne = "";
            for (int i = 0; i < cents.Length; i++)
            {
                digit = cents[i].ToString();
                if (digit.Equals("0"))
                {
                    engOne = "Zero";
                }
                else
                {
                    engOne = ones(digit);
                }
                cts += " " + engOne;
            }
            return cts;
        }





我的尝试:



就像1110.56这样的单词,One Thousand One Ten Ten Rupees和Fifty Six Paise onyl。



im制作代码但是如果我是inter dot然后编程停止工作和错误



What I have tried:

like 1110.56 in word like, One Thousand One Hundred Ten Rupees And Fifty Six Paise onyl.

i m making a code but if i inter dot then program is stop working and error

推荐答案

所以使用调试器:在 changeToWords 的第一行放置一个断点运行你的代码。

当调试器到达它时,它将停止并让你控制。您可以使用鼠标(和各种调试窗格)查看变量内容。步骤虽然您的代码在执行每一行之前计算出您期望发生的事情,并将其与实际发生的事情进行比较。它做了你所期望的吗?好的 - 继续前进。否则,为什么不呢?你做了什么,你没想到,或者没有做到这一点?

这是一项技能 - 可以预见地称为调试 - 开发它的唯一方法就是使用它。在一个像这样的简单项目上开发技能比在一个有微妙错误的10万行怪物上开发技能要简单得多......



所以试一试。看看你能找到什么。
So use the debugger: put a breakpoint on the first line in changeToWords and run your code.
When the debugger reaches it, it will stop and let you take control. You can use the mouse (and various debug panes) to look at the variable contents. Step though your code working out what you expect to happen before you execute each line, and compare that with what did actually happen. Did it do what you expected? OK - move on. Otherwise, why not? What did it do that you didn't expect, or not do that you did?
This is a skill - predictably called debugging - and the only way to develop it is to use it. And it's a lot simpler to develop a skill on a simple project like this than on a 100,000 line monster with a subtle bug...

So give it a go. See what you can find out.


为什么要强行打开门?



有很多关于此的文章。查看 [ ^ ]。



您可能最感兴趣的是: Number to Word(阿拉伯语版) [ ^ ]



As OriginalGriff [ ^ ],在代码中查找错误的最佳方法是使用调试器。
Why to force doors wide open?

There's a lot of articles about that. Check this[^].

You may be most interested in: Number To Word (Arabic Version)[^]

As OriginalGriff[^] mentioned, the best way to find an error in your code is to use debugger.


这篇关于如何将卢比的印度卢比中的数字转换成单词,并像1110.56 C#一样在单词,一千一百十卢比和五十六个paise中转换。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆