将十进制转换为文本表示

时间:2014-04-10 05:01:19

标签: c# asp.net

假设给出的小数输入为:99.50。

然后文本输出应该是:"九十九和五十"。

我只能在互联网上找到整数的例子。

1 个答案:

答案 0 :(得分:0)

我们用于满足您需求的控制台应用程序示例:

static String NumWordsWrapper(double n)
    {
        string words = "";
        double intPart;
        double decPart = 0;
        if (n == 0)
            return "zero";
        try {
            string[] splitter = n.ToString().Split('.');
            intPart = double.Parse(splitter[0]);
            decPart = double.Parse(splitter[1]);
        } catch {
            intPart = n;
        }

        words = NumWords(intPart);

        if (decPart > 0) {
            if (words != "")
                words += " and ";
            int counter = decPart.ToString().Length;
            switch (counter) {
                case 1: words += NumWords(decPart) + " tenths"; break;
                case 2: words += NumWords(decPart) + " hundredths"; break;
                case 3: words += NumWords(decPart) + " thousandths"; break;
                case 4: words += NumWords(decPart) + " ten-thousandths"; break;
                case 5: words += NumWords(decPart) + " hundred-thousandths"; break;
                case 6: words += NumWords(decPart) + " millionths"; break;
                case 7: words += NumWords(decPart) + " ten-millionths"; break;
            }
        }
        return words;
    }

    static String NumWords(double n) //converts double to words
    {
        string[] numbersArr = new string[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
        string[] tensArr = new string[] { "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninty" };
        string[] suffixesArr = new string[] { "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "Quattuordecillion", "Quindecillion", "Sexdecillion", "Septdecillion", "Octodecillion", "Novemdecillion", "Vigintillion" };
        string words = "";

        bool tens = false;

        if (n < 0) {
            words += "negative ";
            n *= -1;
        }

        int power = (suffixesArr.Length + 1) * 3;

        while (power > 3) {
            double pow = Math.Pow(10, power);
            if (n >= pow) {
                if (n % pow > 0) {
                    words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1] + ", ";
                } else if (n % pow == 0) {
                    words += NumWords(Math.Floor(n / pow)) + " " + suffixesArr[(power / 3) - 1];
                }
                n %= pow;
            }
            power -= 3;
        }
        if (n >= 1000) {
            if (n % 1000 > 0) words += NumWords(Math.Floor(n / 1000)) + " thousand, ";
            else words += NumWords(Math.Floor(n / 1000)) + " thousand";
            n %= 1000;
        }
        if (0 <= n && n <= 999) {
            if ((int)n / 100 > 0) {
                words += NumWords(Math.Floor(n / 100)) + " hundred";
                n %= 100;
            }
            if ((int)n / 10 > 1) {
                if (words != "")
                    words += " ";
                words += tensArr[(int)n / 10 - 2];
                tens = true;
                n %= 10;
            }

            if (n < 20 && n > 0) {
                if (words != "" && tens == false)
                    words += " ";
                words += (tens ? "-" + numbersArr[(int)n - 1] : numbersArr[(int)n - 1]);
                n -= Math.Floor(n);
            }
        }

        return words;

    }
相关问题