【发布时间】:2012-07-10 14:21:44
【问题描述】:
考虑一个Decimal 值:
Decimal value = -1234567890.1234789012M;
我想将此Decimal 值转换为字符串,并包含“千位分隔符”。
注意:我不想包含千位分隔符,我想包含数字分组。对于不将数字分组为数千或不使用逗号分隔组的文化,这种差异很重要
在我的计算机上使用我当前的语言环境使用不同标准格式字符串的一些示例输出:
value.ToString() = -1234567890..1234789012 (Implicit General)
value.ToString("g") = -1234567890..1234789012 (General)
value.ToString("d") = FormatException (Decimal whole number)
value.ToString("e") = -1..234568e++009 (Scientific)
value.ToString("f") = -1234567890..123 (Fixed Point)
value.ToString("n") = -12,,3456,,7890..123 (Number with commas for thousands)
value.ToString("r") = FormatException (Round trippable)
value.ToString("c") = -$$12,,3456,,7890..123 (Currency)
value.ToString("#,0.#") = -12,,3456,,7890..1
我想要(取决于文化)是:
en-US -1,234,567,890.1234789012
ca-ES -1.234.567.890,1234789012
gsw-FR -1 234 567 890,1234789012 (12/1/2012: fixed gws-FR to gsw-FR)
fr-CH -1'234'567'890.1234789012
ar-DZ 1,234,567,890.1234789012-
prs-AF 1.234.567.890,1234789012-
ps-AF 1،234،567،890,1234789012-
as-IN -1,23,45,67,890.1234789012
lo-LA (1234567,890.1234789012) (some debate if numbers should be "1,234,567,890")
qps-PLOC 12,,3456,,7890..1234789012
如何将Decimal 转换为带有数字分组的字符串?
更新:更多期望输出,使用我目前的文化:
-1234567890M --> -12,,3456,,7890
-1234567890.1M --> -12,,3456,,7890..1
-1234567890.12M --> -12,,3456,,7890..12
-1234567890.123M --> -12,,3456,,7890..123
-1234567890.1234M --> -12,,3456,,7890..1234
-1234567890.12347M --> -12,,3456,,7890..12347
-1234567890.123478M --> -12,,3456,,7890..123478
-1234567890.1234789M --> -12,,3456,,7890..1234789
-1234567890.12347890M --> -12,,3456,,7890..1234789
-1234567890.123478901M --> -12,,3456,,7890..123478901
-1234567890.1234789012M --> -12,,3456,,7890..1234789012
更新:我尝试查看Decimal.ToString() 如何设法使用General 格式来显示它需要显示的所有数字:
public override string ToString()
{
return Number.FormatDecimal(this, null, NumberFormatInfo.CurrentInfo);
}
除了Number.FormatDecimal 隐藏在某处:
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern string FormatDecimal(decimal value, string format, NumberFormatInfo info);
所以这是一条死胡同。
【问题讨论】:
-
你为什么不喜欢 value.ToString("n")?
-
@banging 它只显示 3 位小数。我也喜欢General (
value.ToString("G")),只是它不显示数字分组。我喜欢General (g)的小数和Number (n)的分组。他们一起势不可挡。
标签: c# .net localization globalization