C#控制台应用程序。我有以下代码:
next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
而不是返回0.758550它返回0.75855(最后没有零),即使我指定它是双倍。
答案 0 :(得分: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
。
答案 1 :(得分:2)
由于0.758550
和0.75855
没有区别,因此最后0
无效。你指定格式来获得最后的零。
string strForDisplay = next.ToString("0.0000000");
以上内容将为您提供最后一次0