C# double.ToString() 最大位数和尾随零

C# double.ToString() max number of digits and trailing zeros

如何将 double 转换为最大位数为 6 的 string 并删除尾随零?

我想要:

2.123456123 -> "2.123456"
0.0000012 -> "0.000001"   (and not "1.2e-6")
12.45 -> "12.45"   (and not "12.450000")
36 -> "36"   (and not "36.000000")

使用 string.Format("{0:F6"}, value) 输出尾随零和 string.Format("{0:G6"}, value) 不适合第二个示例。

可以使用value.ToString("0.######)吗?

是否有与 string.Format() 等效的方法?

可以使用value.ToString("0.######")。但是,您应该考虑另一件事:double 不是十进制(以 10 为底)的数字。您不应该依赖数字的十进制表示是任何合理的 - 许多以 10 为底的普通十进制数字需要以 2 为底的无限小数扩展。

如果您确实关心十进制表示,可能使用 decimal 是更好的主意 - 它也是一个浮点数,但以 10 为基数.

在任何一种情况下,这都涉及四舍五入 - 这可能是也可能不是您想要的。

tokens 是一个带有价格字符串的 ViewModel 属性:

foreach (var item in tokens)
{
  item.Price = double.Parse(item.Price).ToString("#,0");
}

// 123456 => 123,456