【问题标题】:Number to words currency decimal数字到单词货币小数
【发布时间】:2014-02-18 19:00:21
【问题描述】:

我有这段代码可以将数字转换为单词并且它可以工作,但我对我的应用程序有一个要求,那就是:

示例 1:程序做什么,让我们取这个数字:27,59 - 代码将带我到“doua sute sapte zeci si 59 bani。没问题,但是:

示例 2:当数字为 27.00 时,结果是:doua zeci si sapte si 00 bani,而我想要的结果只有当某个数字有 .00 来削减 'si 00 bani' 并从 27.00 = doua zeci si sapte lei 比 doua zeci si sapte lei si 00 bani。 谢谢

  private static string[] _ones =
        {
            "",
            "unu",
            "doua",
            "trei",
            "patru",
            "cinci",
            "sase",
            "sapte",
            "opt",
            "noua"
        };

        private static string[] _teens =
        {
            "zece",
            "unsprezece",
            "doisprezece",
            "treisprezece",
            "paisprezece",
            "cincisprezece",
            "saisprezece",
            "saptisprezece",
            "optsprezece",
            "nouasprezece"
        };

        private static string[] _tens =
        {
            "",
            "zece",
            "douazeci",
            "treizeci",
            "patruzeci",
            "cincizeci",
            "saizeci",
            "saptezeci",
            "optzeci",
            "nouazeci"
        };

        // US Nnumbering:
        private static string[] _thousands =
        {
            "",
            "mie",
            "milion",
            "miliard",
            "trilion",
            "catralion"
        };
string digits, temp;
            bool showThousands = false;
            bool allZeros = true;

            // Use StringBuilder to build result
            StringBuilder builder = new StringBuilder();
            // Convert integer portion of value to string
            digits = ((long)value).ToString();
            // Traverse characters in reverse order
            for (int i = digits.Length - 1; i >= 0; i--)
            {
                int ndigit = (int)(digits[i] - '0');
                int column = (digits.Length - (i + 1));

                // Determine if ones, tens, or hundreds column
                switch (column % 3)
                {
                    case 0:        // Ones position
                        showThousands = true;
                        if (i == 0)
                        {
                            // First digit in number (last in loop)
                            temp = String.Format("{0} ", _ones[ndigit]);
                        }
                        else if (digits[i - 1] == '1')
                        {
                            // This digit is part of "teen" value
                            temp = String.Format("{0} ", _teens[ndigit]);
                            // Skip tens position
                            i--;
                        }
                        else if (ndigit != 0)
                        {
                            // Any non-zero digit
                            temp = String.Format("{0} ", _ones[ndigit]);
                        }
                        else
                        {
                            // This digit is zero. If digit in tens and hundreds
                            // column are also zero, don't show "thousands"
                            temp = String.Empty;
                            // Test for non-zero digit in this grouping
                            if (digits[i - 1] != '0' || (i > 1 && digits[i - 2] != '0'))
                                showThousands = true;
                            else
                                showThousands = false;
                        }

                        // Show "thousands" if non-zero in grouping
                        if (showThousands)
                        {
                            if (column > 0)
                            {
                                temp = String.Format("{0}{1}{2}",
                                    temp,
                                    _thousands[column / 3],
                                    allZeros ? " " : ", ");
                            }
                            // Indicate non-zero digit encountered
                            allZeros = false;
                        }
                        builder.Insert(0, temp);
                        break;

                    case 1:        // Tens column
                        if (ndigit > 0)
                        {
                            temp = String.Format("{0}{1}",
                                _tens[ndigit],
                                (digits[i + 1] != '0') ? " si " : " ");
                            builder.Insert(0, temp);
                        }
                        break;

                    case 2:        // Hundreds column
                        if (ndigit > 0)
                        {
                            temp = String.Format("{0} sute ", _ones[ndigit]);
                            builder.Insert(0, temp);
                        }
                        break;
                }
            }

            builder.AppendFormat("lei si {0:00} bani", (value - (long)value) * 100);


            // Capitalize first letter
            return String.Format("{0}{1}",
                Char.ToUpper(builder[0]),
                builder.ToString(1, builder.Length - 1));

【问题讨论】:

    标签: c# numbers decimal number-formatting


    【解决方案1】:

    你需要一个条件来检查十进制值。一个简单的方法是 .net 提供的Decimal.Remainder() 方法。

    改一下

    builder.AppendFormat("lei si {0:00} bani", (value - (long)value) * 100);
    

    为您的 00 包含一个条件...

    // You always need "lei" right?
    builder.AppendFormat("lei");
    
    // This code simply divides the decimal value by 1; and only adds "si NN bani" if there's a remainder
    if (Decimal.Remainder(value, 1) > 0) {
        builder.AppendFormat(" si {0:00} bani", (value - (long)value) * 100);
    }
    

    【讨论】:

    • 我总是需要 lei,但如果小数点为 27.00,仅当它为零时,我需要而不是 27.00 说 'doua zeci si sapte lei' 而不是 00 bani,您的代码将删除 00 bani 只有当值为 0 如果实际数字后的小数点值为 00,则只有当值为 27.00 时,我才需要删除 'si 00 bani'
    • @user3144640:好吧,我草率的错误。固定!
    • 谢谢你一百万,如果你能在另一件事上帮助我,我将非常感激
    • stackoverflow.com/questions/21390366/… 这是链接请帮帮我
    猜你喜欢
    • 2014-03-25
    • 2011-08-29
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多