[英]c# string format issue for money
我需要将字符串转换为{###}的货币格式。###。###,##
那是
值5461497702600
会成为
54.614.977.026,00
数字变得过大。
我在用
return string.Format("{0:#" + (val < 1000 ? "" : "\\.") + "##0.00}", val);
该示例返回
54614977.026,00
(只有一个点)
任何帮助,将不胜感激
它比您想像的要简单,只需使用:
decimal number = 5461497702600M;
string s = string.Format("{0:#,##0.00}", number );
在此必须使用decimal
。 #,## 0.00图片是执行此操作的非常标准的方法,输出将使用系统默认符号,并且fromatter很聪明,可以根据需要重复3位分组。 使用以下重载指定区域性,带有InvariantCulture的示例将始终使用小数点:
string s = string.Format(System.Globalization.CultureInfo.InvariantCulture,
"{0:#,##0.00}", number);
您可以使用带格式字符串和IFormatProvider
的ToString
重载 。
然后,只需将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"));
我认为您要尝试执行的操作取决于计算机的当前文化/区域设置。 在您的情况下,您尝试将COMMA用作小数,将十进制用作COMMA,即千位分隔符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.