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

本文关键字:错误 返回 小数 显示 6位 | 更新日期: 2023-09-27 18:03:56

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

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

不返回0.758550,它返回0.75855(末尾没有零),即使我指定它为双精度

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

是的,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.7585500.75855没有差异,所以最后一个0不显著。您可以指定获取最后零的格式。

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

上面会给你最后一个0