-2

我使用 VC++ 2010 编译器。我下面的代码给出了 509:

double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);

我想念什么吗?

谢谢

4

2 回答 2

6

浮点数据类型不能代表所有数字。由于您的计算机使用二进制浮点,因此唯一可表示的数字是s2 e形式,其中s是有效数,e是指数。很容易看出 5.1 不适合这种模式。它不能完全表示。

页面向您显示最接近 5.1 的可精确表示的双精度二进制浮点值。值为:

5.09999 99999 99999 64472 86321 19949 90706 44378 66210 9375

所以最接近 5.1 的值略小于 5.1。将它乘以 100 并截断,得到 509。

了解有关该主题的更多信息的标准参考是 David Goldberg 的What Every Computer Scientist Should Know About Floating-Point Arithmetic

于 2013-04-02T09:07:45.917 回答
0

5.1 表示为 5.099999,乘以 100.0 为 509.9990。转换为 int 后为 509。

于 2013-04-02T09:17:41.640 回答