C# 控制台应用程序。我有以下代码:
next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
即使我将其指定为双精度,它也不会返回 0.758550,而是返回 0.75855(末尾没有零)。
C# 控制台应用程序。我有以下代码:
next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
即使我将其指定为双精度,它也不会返回 0.758550,而是返回 0.75855(末尾没有零)。
是的,double
不保留尾随零。它应该是一种关于值大小的类型,而不是精确的十进制数字。
但是,decimal
确实保留尾随零,所以如果你写:
decimal next = 758550m;
next = next * 0.000001m;
file.WriteLine(next);
...这会告诉你你想要什么。有趣的是,除以 1000000在这里不起作用。我怀疑该算法类似于“保留与任一操作数中一样多的微不足道的十进制数字”,但这并不完全清楚。
double
或者,您可以为您的值指定自定义格式:
file.WriteLine(next.ToString("0.000000"));
或者:
file.WriteLine("{0:0.000000}", next);
您应该真正确定哪种类型最适合您。根据经验,“人为”价值——尤其是货币——最恰当地表示为decimal
. “自然”值(例如距离、权重等)最合适地表示为double
.
0.758550
因为和没有区别0.75855
,所以最后一个0
无关紧要。您指定格式以获取最后一个零。
string strForDisplay = next.ToString("0.0000000");
以上将给你最后0