我使用VC ++ 2010编译器。我的下面的代码给出了509:
double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
我想念一下吗?
由于
答案 0 :(得分:6)
浮点数据类型不能代表所有数字。由于您的计算机使用二进制浮点数,因此唯一可表示的数字的格式为 s2 e ,其中 s 是有效数字,而 e 是指数。而且很容易看出5.1不适合这种模具。它不完全可以表示。
此page向您显示最接近的可精确表示的双精度二进制浮点值到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。
答案 1 :(得分:0)
5.1表示为5.099999,乘以100.0时为509.9990。转换为int后将为509。