C#显示6位小数返回错误值

时间:2013-03-14 10:42:50

标签: c#

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

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

而不是返回0.758550它返回0.75855(最后没有零),即使我指定它是双倍。

2 个答案:

答案 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.7585500.75855没有区别,因此最后0无效。你指定格式来获得最后的零。

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

以上内容将为您提供最后一次0