C#控制台应用程序.我有以下代码:
next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
Run Code Online (Sandbox Code Playgroud)
而不是返回0.758550它返回0.75855(最后没有零),即使我指定它是双倍.
是的,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.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |