【问题标题】:remove tailing zeros in decimal删除十进制的尾随零
【发布时间】:2012-11-15 16:26:22
【问题描述】:

我想删除小数的拖尾零。它以 5 精度从 DB 加载。

我使用的是逗号 (,) 是小数点的文化。

例如:

  • 10,00050 -> 10,0005
  • 10,00000 -> 10
  • 0,00000 -> 0
  • 0,00001 -> 0,00001

我可以使用General ("G") Format Specifier,但我不想在任何时候使用科学记数法。

BR,米。

【问题讨论】:

  • 10,00000 -> 10 这将留下一个尾随零。错字?
  • @PeteOakey 可能不是,因为它在小数点之前。 (我假设 OP 使用以 , 作为小数点的文化。
  • @PeteOakey 他指的是小数分隔符右侧的尾随零。
  • OK - 在这种情况下,逗号是小数点分隔符。我已更新问题以反映这一点。

标签: c# .net string format decimal


【解决方案1】:

您可以使用custom numeric format string

decimal d = 12.45600m;
d.ToString("0.#####");

【讨论】:

  • 这不太对:它会四舍五入到 12.45679。假设十进制为 456789000。如何将其格式化为 12.456789?
  • @ReacherGilt "从数据库加载,精度为 5。"
  • "你的例子是精度 6"
【解决方案2】:

可能有更优雅的解决方案,但这适用于字符串。

string[] decimals = {
                                "10,00050",// -> 10,0005
                                "10,00000",// -> 10
                                "0,00000",// -> 0
                                "0,00001",// -> 0,00001
                             };
        foreach (string dec in decimals)
        {
            Console.WriteLine(" {0} -> {1}", dec, decimal.Parse(dec.TrimEnd(new char[] { '0' })));
        }

【讨论】:

  • 我建议在两个字符串十进制转换上都指定InvariantCulture。我不相信文化。
【解决方案3】:

尝试“N”,如果数字是一千或更高,则添加逗号。

【讨论】:

    猜你喜欢
    • 2016-11-24
    • 2012-06-28
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2014-07-26
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多