将数字转换为单词

即使这个问题已经发布并在之前得到解答。 我想要帮助我的代码。 任务是将数字转换为0到1000万的单词。 我试图用我的代码使用GUI来做到这一点,问题是它根本没有返回答案。 任何人都可以帮助我确定代码可能存在的问题。

代码如下:

private void btnConvertToText_Click(object sender, EventArgs e) { string ConvertedNumber = " "; int number = Convert.ToInt32(txtNumber.Text); int Count = 0; string [] ones = {" One ", " Two ", " Three ", " Four ", " Five ", " Six ", " Seven ", " Eight ", " Nine "}; string [] teens= {" Eleven ", " Twelve ", " Thirteen ", " Fourtte n ", " Fifteen ", " Sixteen ", " Seventeen ", " Eighteen ", " Nineteen "}; string [] tens = {" Ten ", " Twenty ", " Thirty ", " Fourty ", " Fifty ", " Sixty ", " Seventy ", " Eighty ", " Ninenty "}; string [] moreThenTens = {" hundred ", " thousand ", " million "}; while (number >= 0) { if (number == 0) { ConvertedNumber = "Zero"; } else if (number < 10) { for (int Counter = 1; Counter = 10 && number  10) { if (number > 10 && number < 20) { for (int x = 11; x = 100 && number  100) { number -= 100; Count++; } ConvertedNumber += ones[Count - 1] + moreThenTens[0]; } else if (number >= 1000 && number  1000) { number -= 1000; Count++; } ConvertedNumber += ones[Count - 1] + moreThenTens[1]; } else if (number >= 10000 && number  10000) { if (number = 20000) { number -= 10000; Count++; } } if (Count >= 1) { if (number = 1000) { ConvertedNumber += teens[Count - 1] + moreThenTens[1]; } } else if (Count > 1) { ConvertedNumber += tens[Count - 1] + moreThenTens[1]; } } else if (number >= 100000 && number  100000) { number -= 100000; Count++; } ConvertedNumber += ones[Count - 1] + moreThenTens[0] + moreThenTens[1]; } else if (number >= 1000000 && number  1000000) { number -= 1000000; Count++; } ConvertedNumber += ones[Count - 1] + moreThenTens[2]; } else if (number == 10000000) { while (number > 10000000) { number -= 10000000; Count++; } ConvertedNumber += tens[0] + moreThenTens[2]; } } txtConvertedNumber.Text = ConvertedNumber; } } 

 while (number >= 0) 

看起来你的代码正在创建一个无限循环。 举个例子:

 if (number == 0) { ConvertedNumber = "Zero"; } 

这不会退出你的循环,因此永远不会到达

 txtConvertedNumber.Text = ConvertedNumber; 

使用支票转换您的号码,例如:

 if (number == 0) { ConvertedNumber = "Zero"; number = -1; } 

这可能很有用

 public static string NumberToWords(int number) { if (number == 0) return "Zero"; if (number < 0) return "Minus " + NumberToWords(Math.Abs(number)); string words = ""; if ((number / 1000000) > 0) { words += NumberToWords(number / 1000000) + " Million "; number %= 1000000; } if ((number / 1000) > 0) { words += NumberToWords(number / 1000) + " Thousand "; number %= 1000; } if ((number / 100) > 0) { words += NumberToWords(number / 100) + " Hundred "; number %= 100; } if (number > 0) { if (words != "") words += "and "; var unitsMap = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; var tensMap = new[] { "zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; if (number < 20) words += unitsMap[number]; else { words += tensMap[number / 10]; if ((number % 10) > 0) words += "-" + unitsMap[number % 10]; } } return words; } 

你应该在while循环之前检查数字是否为零

  if ( number == 0 ) ConvertedNumber= "Zero" ; 

然后按如下方式修改while

 while(number > 0) 

这可能有助于十进制数

 string[] number = Number1.ToString().Split('.'); String Word=NumberToWords(convert.toInt64(number[0])) + " AND " + NumberToWords(convert.toInt64(number[1])); 

这也可以使您的代码更容易调试/遵循。

 while (NumberExists(ConvertedNumber, number)) { ... } 

将此方法放在与nameSpace相同的nameSpace中。

  private static bool NumberExists(string convertedNumber, int number) { if (convertedNumber == " " && number != null) { return true; } else return false; } 

一般来说,我建议不要在代码中添加幻数,比如+ 1s或-1s。 它可以使调试更多的苦差事。 如果你必须这样做以获得一些工作,试着找出原因并尽快重写。 绝对在开始其他方法之前。

好像它被困在循环中..我在这里检查了青少年数字部分,似乎你忘了将数字减少到小于零或零

  else if (number >= 10 && number < 100) { if(number > 10) { if (number > 10 && number < 20) { for (int x = 11; x < 20; x++) { if (number == x) { ConvertedNumber += teens[x - 11]; } } ***number -= 100;*** } else { number -= 10; Count++; ConvertedNumber += tens[Count - 1]; } } }