C# 如何使用亚洲格式格式化货币

C# 如何使用亚洲格式格式化货币,c#,vb.net,string,formatting,C#,Vb.net,String,Formatting,在印度和其他亚洲国家,货币的格式如下: 前三位数字分成三组,然后所有其他数字分成两组。 例:254255、22、54255.12等 stringmoney=string.Format(“{0:#,##0.00}”,254255.12) 给出254255.12的输出 但是需要的输出是254255.12使用适当的CultureInfo和“c”格式说明符: CultureInfo hindi = CultureInfo.CreateSpecificCulture("hi-IN"); string te

在印度和其他亚洲国家,货币的格式如下: 前三位数字分成三组,然后所有其他数字分成两组。 例:254255、22、54255.12等 stringmoney=string.Format(“{0:#,##0.00}”,254255.12)

给出254255.12的输出


但是需要的输出是254255.12

使用适当的CultureInfo和“c”格式说明符:

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

请注意,您应该真正使用
十进制
而不是
双精度
,以避免二进制浮点问题。

这是一种简单的方法:

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是计算机上的本机区域性,则默认情况下,数字将以这种方式格式化,而无需显式检索区域性并将其传递给格式提供程序参数。

+1绝对不要将浮点数用于货币计算。您的意思是不要使用二进制浮点数
decimal
仍然是浮点类型。这里的二进制是正确的术语吗?内存中的
decimal
值不是用二进制表示的吗?我相信
decimal
表示为16字节(二进制)整数和相关(二进制)比例因子。减少舍入误差的原因是没有单独的尾数和指数等。@MarkJ:重要的是浮点是二进制还是十进制
decimal
double
都有单独的尾数和指数值。你认为区别在哪里?(顺便说一句,
decimal
实际上有一个5位指数、一个96位尾数和一个符号位。)有关差异的更多信息,请参阅和。