2

C# 控制台应用程序。我有以下代码:

next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);

即使我将其指定为双精度,它也不会返回 0.758550,而是返回 0.75855(末尾没有零)。

4

2 回答 2

7

是的,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.

于 2013-03-14T10:45:00.833 回答
2

0.758550因为和没有区别0.75855,所以最后一个0无关紧要。您指定格式以获取最后一个零。

string strForDisplay = next.ToString("0.0000000");

以上将给你最后0

于 2013-03-14T10:44:17.010 回答