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
如何将 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