【问题标题】:Formatting a decimal number similar to ToString("G29") plus a thousands separator格式化类似于 ToString("G29") 的十进制数加上千位分隔符
【发布时间】:2015-06-23 14:48:18
【问题描述】:

我需要在十进制类型的变量中显示一些数字。

我想几乎按原样显示它们,ToString("G29") 给了我。

但是,我想添加千位分隔符。 ToString("N") 给了我千位分隔符,但完全失去了“G29 善良”。

有没有简单的方法来获取我想要的显示字符串?

价值“N”“G29”我想要什么 ================================================ 296018.413 296,018.41 296018.413 296,018.413 652609 652,609.00 652609 652,609 296.018413 296.02 296.018413 296.018413 326.305 326.31 326.305 326.305

编辑:

另一个 SO 问题/答案最近让我意识到“G29”返回的值小于 0.0001 的科学计数法。所以当我写这个问题时,我没有意识到解决方案需要处理这些特殊情况:

重视我想要的 ========================== 0.00001 0.00001 12345.000067 12,345.000067

【问题讨论】:

  • this 有帮助吗?

标签: c# formatting number-formatting


【解决方案1】:

您可能需要做一些工作。 这个怎么样?

decimal d = 34561.2223400M;
string decimalPart = (d - (int)d).ToString("G29");
string integerPart = d.ToString("##,###");
string finalNumber = integerPart + decimalPart.Substring(1,decimalPart.Length-1);;

【讨论】:

  • 这个答案非常接近,但是因为“G29”返回的科学记数法的数字低于 0.0001,所以它会失败并返回 12.0000123(为此返回“12.23E-05”)。
【解决方案2】:

你必须格式化字符串。

试试:

string yourString = String.Format("{0:N29}", yourWeight);

编辑:

以上内容非常接近。这给出了完全期望的结果:

string yourString = String.Format("{0:N29}", yourWeight).Trim(new [] { '0', '.' });

【讨论】:

  • 这很接近,但它保留了所有尾随零。例如,296,018.41300000000000000000000000000。也许我会使用您的解决方案并删除零。这将比添加逗号更简单。
  • 第二个建议不适用于以下值:10001000.00
  • 天哪!艾哈迈德是正确的!以上将把[420]变成[42]!我将更改接受的答案。
  • string.Format("{0:N29}", yourWeight).TrimEnd(new[] { '0' }).TrimEnd(new[] { '.' }) 工作正常,不是吗?
【解决方案3】:

有一个非常简单的解决方案,虽然它涉及一个相当长的格式字符串。

decimal d = 12345.000067m;
string s = d.ToString("#,###0.############################"); // 28 #'s after the decimal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多