使用 ToString() 格式化十进制值以将逗号作为千位分隔符,其中小数位数未知

Posted

技术标签:

【中文标题】使用 ToString() 格式化十进制值以将逗号作为千位分隔符,其中小数位数未知【英文标题】:Formatting a decimal value with ToString() to have commas as thousand separators where the amount of decimal places is unknown 【发布时间】:2013-08-15 14:51:03 【问题描述】:

我有很多小数,每个小数都不同:

decimal quantity = Decimal.Round(item.Quantity.Value, 2, 
    MidpointRounding.AwayFromZero);
decimal difference = Decimal.Round(quantity * eva, 0, 
    MidpointRounding.AwayFromZero);

当绑定到 UI 时,我会像这样转换成字符串:

string Quantity = quantity.ToString("G", CultureInfo.InvariantCulture);
string Difference = difference.ToString("G", CultureInfo.InvariantCulture);

是否有一种通用方法可以为千位分隔符插入逗号,同时保持原始小数舍入相同?

【问题讨论】:

你查过如何使用string.Format 方法.. 网上以及SO 上的大量示例 【参考方案1】:

尝试使用格式。

        double d = 1.234567;
        String output = d.ToString("#,##0.##");

还有,

double d = 123456789.1;
string format = d.ToString().
                  IndexOf(NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) 
                  >=0 ? "#,##0.00" : "#,##0";
Console.WriteLine (d.ToString(format));

【讨论】:

【参考方案2】:

对于任何想知道的人,我最终使用 String.Format(new CultureInfo("en-US"), "0:N", difference) 并根据我需要多少小数位更改了 N

【讨论】:

【参考方案3】:

您可以使用“N”格式说明符并提供您希望任何数字保留的位数。如果您希望每个数字可能具有不同的位数,则必须确定每次提供给格式字符串的数字。

quantity.ToString("N(digits)");

完整的文档位于http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#NFormatString

【讨论】:

以上是关于使用 ToString() 格式化十进制值以将逗号作为千位分隔符,其中小数位数未知的主要内容,如果未能解决你的问题,请参考以下文章

python 格式化单个值以在符合RFC4180的CSV文件中使用。使用逗号将这个函数返回的多个值连接到crea

十进制格式分隔符

TextBox 不支持系统十进制(点或逗号)

如何在按钮 func 中传递特定 func 的常量值以将其用作导航的目的地

计算浮点值以将整数乘以产生小于 1 的最大数

(android)十进制格式,使用逗号代替句号,同时使用“#.##”进行格式化