c#字符串格式问题

时间:2010-03-19 09:27:57

标签: c# string formatting

我需要将字符串转换为货币格式{###}。###。###,##

值5461497702600

会变成

54.614.977.026,00

数字变得过大。

我正在使用

return string.Format("{0:#" + (val < 1000 ? "" : "\\.") + "##0.00}", val);

返回示例

54614977.026,00

(只有一个点)

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:4)

这比你想象的要简单,只需使用:

   decimal number = 5461497702600M;
   string s = string.Format("{0:#,##0.00}", number );

在此处使用decimal至关重要。 #,## 0.00图片是一种非常标准的方式,输出将使用系统默认符号,而且格式足够聪明,可以根据需要重复3位数分组。使用以下重载来指定Culture,此示例与InvariantCulture将始终使用小数点:

 string s = string.Format(System.Globalization.CultureInfo.InvariantCulture, 
      "{0:#,##0.00}", number);

答案 1 :(得分:1)

您可以使用ToString overloadIFormatProvider的{​​{3}}。

然后只需使用N2作为格式字符串,并使用CultureInfo - 例如de-DE - .作为组分隔符和,作为小数符号:

return (val / 100).ToString("N2", new CultureInfo("de-DE"));

请注意,如果val是整数类型而不是浮点类型,则除以100将丢失两个最低有效数字。为避免这种情况,您可以在分割时将整数值转换为decimal

return (val / 100M).ToString("N2", new CultureInfo("de-DE"));

答案 2 :(得分:0)

我认为您要做的事情取决于您机器当前的文化/区域设置。在您的情况下,您尝试使用COMMA作为十进制,小数作为COMMA,千位分隔符