移除尾随零点

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我有一些由集合返回的字段,如

2.4200
2.0044
2.0000

我想要像这样的结果

2.42
2.0044
2

我试过String.Format,但它回来了2.0000并将其设置为N0舍入其他值。

提问于
用户回答回答于

如果输入是一个字符串,它不是像这样简单吗?可以使用其中之一:

string.Format("{0:G29}", decimal.Parse("2.0044"))

decimal.Parse("2.0044").ToString("G29")

2.0m.ToString("G29")

这应该适用于所有输入。

必须明确地将精确说明符设置为29,因为docs明确指出:

但是,如果数字是十进制,并且省略了精度说明符,则始终使用定点表示法,并保留尾随零。

在评论中:

小心0.000001这样的数值。G29格式将以尽可能最短的方式呈现它们,因此它将切换到指数表示法。string.Format("{0:G29}", decimal.Parse("0.00000001",System.Globalization.CultureInfo.GetCultureInfo("en-US")))会给出“1E-08”的结果。

用户回答回答于

我遇到了同样的问题,但在一个情况下,我无法控制字符串的输出,而这个输出是由一个库处理的。

public static decimal Normalize(this decimal value)
{
    return value/1.000000000000000000000000000000000m;
}

小数点的指数部分被简化为所需的部分。在输出十进制上调用ToString()将写入这个数字,而不跟踪0。例如:

1.200m.Normalize().ToString();

扫码关注云+社区