2

我想将 0.01 添加到 36.01 并得到 36.02 作为结果但下面的代码返回 36.019999999999994。

Double d = 36.01;
d = d + 0.01;

谁能告诉我如何得到 36.02 作为结果?提前致谢

4

4 回答 4

6

使用Decimal而不是Double. 十进制具有更高的准确性,例如,当您添加美元金额时,建议使用十进制。

这是一个很好的以前的 SO 帖子,它将为您提供更多详细信息:

十进制与双倍!- 我应该使用哪一个以及何时使用?

于 2013-03-07T20:01:22.043 回答
3

那是因为您正在添加浮点数。0.01 是十进制小数 1/100 th,在可用位数中不能以二进制精确表示。考虑使用类型,或根据您的需要使用适当的重载和舍入样式decimal舍入到所需的精度。Math.Round()

于 2013-03-07T20:02:35.130 回答
2

您应该decimal按照建议使用。更重要的是,您应该阅读每个计算机科学家应该了解的关于浮点运算的知识,以了解潜在的问题

于 2013-03-07T20:05:00.520 回答
0

double是双精度浮点数,decimal精度更高。

你应该使用decimal而不是。

decimal d = 36.01m;
d = d + 0.01m;
Console.WriteLine(d);

这是一个演示

当然,我建议您阅读 What Every Computer Scientist Should Know About Floating-Point Arithmetic

于 2013-03-07T20:01:44.947 回答