我使用 VC++ 2010 编译器。我下面的代码给出了 509:
double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
我想念什么吗?
谢谢
浮点数据类型不能代表所有数字。由于您的计算机使用二进制浮点,因此唯一可表示的数字是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。
5.1 表示为 5.099999,乘以 100.0 为 509.9990。转换为 int 后为 509。