将数字转换为单词C#
可能重复:
我怎样才能把一个整数转换成它的口头表达?
任何人都可以给我一个我可以在数字转换成文字的工作的初始代码?
将数字转换为单词(范围从-1000到+1000)例如:1000 – > 1000
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; }
当我必须解决这个问题时,我创建了一个硬编码的数据字典来映射数字和相关的单词。 例如,以下代码可能代表字典中的几个条目:
{1, "one"} {2, "two"} {30, "thirty"}
你只需要担心在10 ^ 0(1,2,3等)和10 ^ 1(10,20,30)的位置上映射数字,因为一旦你达到100,你只需要知道什么时候使用百万,百万,等等字与您的地图相结合。 例如,当你有一个像3240123这样的数字时,你会得到:三百二十 四万一百二十三 。
在你建立你的地图之后,你需要通过你的号码中的每个数字,并找出适当的名称来使用它。
int a = 0; string b = a.ToString();
编辑:
或者更新的问题只是创建某种查询表,如[weirdlongname]下面的答案。
你真的需要提供更多关于你的意思的细节。 你的意思是“单词”还是“字符串”?
例如,如果你想将一个数字转换成一个字符串,那么你只需要这样的东西:
int i = 123; string text = i.ToString();
事实上,你甚至可以这样做:
(123).ToString(); // u need to put number in parenthesis
乃至
(123.5).ToString(); // this always trips me out
但是,如果您需要将123
转换为123
,那么您需要进行更多的解析。 你不得不把数字分解成几部分,比如数百分之十,等等。
您可以从获取字符串长度(用于整数)开始,找出从哪里开始分解。 例如,123有3位数字,所以让N = 3和i = 1。接下来,你将开始用123除以10(Ni),或100。这给了你1.现在你知道这个词将以“1百”。 然后增加i,减去数字(100)并除以10(Ni),或者10 – 这会给你2个。直到N == i。
希望这可以帮助。 你应该真的编辑你的问题。