我正在使用.net。是否有某些代码可以改变
$ 11,456.50 - >十一点四五十六和50/100美元
我可以自己做,但不想重写已存在的东西。
答案 0 :(得分:4)
这是一个未经修饰的第一枪。根本没有错误检查,代码不处理小数部分。它几乎没有经过测试。使用BigInteger,该方法可以通过向10^66 - 1
添加更多条目来处理最多219
或大约M2
位的值。
public static String NumberToText(Decimal n)
{
if (n < 0)
{
return "minus " + NumberToText(-n);
}
else if (n == 0)
{
return M1[n];
}
else
{
var scale = 0;
var parts = new List<String>();
while (n != 0)
{
if (n % 1000 != 0)
{
parts.Add(String.Format("{0} {1}", NumberToTextSmaller1000(n % 1000), M2[scale]));
}
n = Math.Floor(n / 1000);
scale++;
}
parts.Reverse();
return String.Join(", ", parts.ToArray());
}
}
private static String NumberToTextSmaller1000(Decimal n)
{
var pattern = (n < 100) ? "{2}" : (n % 100 == 0) ? "{0} {1}" : "{0} {1} {2}";
return String.Format(pattern, M1[Math.Floor(n / 100)], M1[100], NumberToTextSmaller100(n % 100));
}
private static String NumberToTextSmaller100(Decimal n)
{
return (0 <= n) && (n < 20)) || (n % 10 == 0)
? M1[n]
: String.Format("{0}-{1}", M1[n - n % 10], M1[n % 10];
}
private static readonly IDictionary<Decimal, String> M1 = new Dictionary<Decimal, String>
{
{ 0, "zero" }, { 1, "one" }, { 2, "two" }, { 3, "three" },
{ 4, "four" }, { 5, "five" }, { 6, "six" }, { 7, "seven" },
{ 8, "eight" }, { 9, "nine" }, { 10, "ten" }, { 11, "eleven" },
{ 12, "twelve" }, { 13, "thirteen" }, { 14, "fourteen" },
{ 15, "fifteen" }, { 16, "sixteen" }, { 17, "seventeen" },
{ 18, "eighteen" }, { 19, "nineteen" }, { 20, "twenty" },
{ 30, "thirty" }, { 40, "forty" }, { 50, "fifty" }, { 60, "sixty" },
{ 70, "seventy" }, { 80, "eighty" }, { 90, "ninety" }, { 100, "hundred" }
};
// The leading spaces are important.
private static readonly IDictionary<Decimal, String> M2 = new Dictionary<Decimal, String>
{
{ 0, String.Empty }, { 1, " thousand" }, { 2, " million" }, { 3, " billion" },
{ 4, " trillion" }, { 5, " quadrillion" }, { 6, " quintillion" },
{ 7, " sextillion" }, { 8, " septillion" }, { 9, " octillion" },
{ 10, " nonillion" }, { 11, " decillion" }, { 12, " undecillion" },
{ 13, " duodecillion" }, { 14, " tredecillion" }, { 15, " quattuordecillion" },
{ 16, " quindecillion" }, { 17, " sexdecillion" }, { 18, " septendecillion" },
{ 19, " octodecillion" }, { 20, " novemdecillion" }, { 21, " vigintillion" }
};
在Decimal.MaxValue
上调用该方法会返回以下内容。
七十九,八十八,一百六十二,五十四,五十四,五十三万亿,三百三十七万亿,五百九十三亿,五百四千三百万,九十五万,三百三十五。
答案 1 :(得分:0)
不是,在.Net框架本身。
您需要自己动手或在线查找现有的实施方案(Google)。