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

Cri*_*ris 2 c#

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

next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

是的,double不保留尾随零.它的意思是一个大小与数值相关的类型,而不是精确的十进制数字.

但是,decimal 确实保留尾随零,所以如果你写:

decimal next = 758550m;
next = next * 0.000001m;
file.WriteLine(next);
Run Code Online (Sandbox Code Playgroud)

......这会告诉你你想要什么.有趣的是,乘以1000000将不会在这里工作.我怀疑该算法是东西线沿线的"保留尽可能多的微不足道的小数位数为在任何一个操作数",但它并不完全清楚.

或者,您可以为您的double值指定自定义格式:

file.WriteLine(next.ToString("0.000000"));
Run Code Online (Sandbox Code Playgroud)

要么:

file.WriteLine("{0:0.000000}", next);
Run Code Online (Sandbox Code Playgroud)

您应该确定哪种类型最适合您.根据经验,"人为"价值 - 尤其是货币 - 最恰当地表示为decimal."自然"值 - 例如距离,重量等 - 最恰当地表示为double.