我想将 0.01 添加到 36.01 并得到 36.02 作为结果但下面的代码返回 36.019999999999994。
Double d = 36.01;
d = d + 0.01;
谁能告诉我如何得到 36.02 作为结果?提前致谢
我想将 0.01 添加到 36.01 并得到 36.02 作为结果但下面的代码返回 36.019999999999994。
Double d = 36.01;
d = d + 0.01;
谁能告诉我如何得到 36.02 作为结果?提前致谢
使用Decimal
而不是Double
. 十进制具有更高的准确性,例如,当您添加美元金额时,建议使用十进制。
这是一个很好的以前的 SO 帖子,它将为您提供更多详细信息:
那是因为您正在添加浮点数。0.01 是十进制小数 1/100 th,在可用位数中不能以二进制精确表示。考虑使用类型,或根据您的需要使用适当的重载和舍入样式decimal
舍入到所需的精度。Math.Round()
您应该decimal
按照建议使用。更重要的是,您应该阅读每个计算机科学家应该了解的关于浮点运算的知识,以了解潜在的问题
double
是双精度浮点数,decimal
精度更高。
你应该使用decimal
而不是。
decimal d = 36.01m;
d = d + 0.01m;
Console.WriteLine(d);
这是一个演示。
当然,我建议您阅读 What Every Computer Scientist Should Know About Floating-Point Arithmetic