我使用VC++ 2010编译器.我的下面代码给出了509:
double volume = 5.1;
int n = static_cast<unsigned int>(volume * 100.0);
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
谢谢
浮点数据类型不能代表所有数字.由于您的计算机使用二进制浮点,因此唯一可表示的数字的形式为s2 e,其中s是有效数,e是指数.而且很容易看出5.1不适合这种模具.它不完全可以表示.
此页面显示最接近的可精确表示的双精度二进制浮点值到5.1.价值是:
5.09999 99999 99999 64472 86321 19949 90706 44378 66210 9375
Run Code Online (Sandbox Code Playgroud)
因此,与5.1最接近的值略小于5.1.将它乘以100并截断,你有509.
从中了解有关该主题的更多信息的标准参考是David Goldberg的"每个计算机科学家应该知道的关于浮点算术的内容".
| 归档时间: |
|
| 查看次数: |
1136 次 |
| 最近记录: |