我想添加0.01到36.01并得到36.02作为结果 但是下面的代码返回36.019999999999994。
Double d = 36.01;
d = d + 0.01;
有人能告诉我如何获得36.02的结果吗? 提前致谢
答案 0 :(得分:6)
使用Decimal
代替Double
。十进制具有更高的准确性,例如,当您添加美元金额时,建议使用。
这是一篇很好的上一篇SO文章,它将为您提供更多详细信息:
答案 1 :(得分:3)
那是因为你要添加浮点数。 0.01是十进制分数1/100 th ,在可用的位数中不能用二进制精确表示。请考虑使用decimal
类型,或使用适当的Math.Round()
重载和舍入样式四舍五入到所需的精度。
答案 2 :(得分:2)
您应该按照建议使用decimal
。更重要的是,您应该阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic以了解潜在的问题
答案 3 :(得分:0)
double
是双精度浮点数,decimal
具有更高的精度。
您应该使用decimal
代替。
decimal d = 36.01m;
d = d + 0.01m;
Console.WriteLine(d);
这是 DEMO 。
当然,我建议你阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic