2010-01-06 31 views
2

在印度和其他亚洲国家,货币格式如下: 前三位数字分组为三位,然后所有其他数字分组为两位一组。 例如:2,54,255.12 5,22,54,255.12等 string money = String.Format(“{0:#,## 0.00}”,254255.12);如何使用亚洲格式格式化货币

使输出254,255.12

,但所需的输出2,54,255.12

回答

14

使用合适的CultureInfo和 “C” 格式说明:

CultureInfo hindi = CultureInfo.CreateSpecificCulture("hi-IN"); 
string text = string.Format(hindi, "{0:c}", 254255.12); 

请注意,你应该使用decimal而不是double货币值,以避免二进制浮点问题。

+1

+1从不使用浮点数进行货币计算。 – slebetman

+0

你的意思是不要使用二进制浮点数......'decimal'仍然是一个浮点类型。 –

+0

是*二进制*在这里是正确的术语?在内存中是不是'decimal'值在二进制中表示?我相信'decimal“被表示为一个16字节(二进制)整数和相关(二进制)比例因子。这是缺乏单独的尾数和指数,减少舍入误差等。 – MarkJ

1

这是一个简单的方法:

System.Globalization.CultureInfo ci = 
    System.Globalization.CultureInfo.GetCultureInfo("hi-IN"); 
Console.WriteLine((123456789.87).ToString("N", ci)); 

注意,这是与在格式提供商/文化对象正确配置的NumberFormatInfo结构来实现的。你可以创建自己的文化对象了,如果需要的话:

foreach (int gs in ci.NumberFormat.CurrencyGroupSizes) 
{ 
    Console.WriteLine(gs); 
} 

还要注意的是,如果系统被配置为使得HI-IN是机器上的本土文化,数字将被格式化这种方式默认为无必须显式检索文化并将其传递给格式提供者参数。