在调试窗口中,当我输入以下命令时:
po 1912/10.0
输出为191.19999999999999
。
我真正想得到的是191.2
。
为什么会发生这种情况,如何将int精确地转换为double?
为什么我的数字(例如0.1 + 0.2)加起来不是一轮好0.3,而是得到一个奇怪的结果,例如0.30000000000000004?
因为在内部,计算机使用的格式(二进制浮点数)根本无法准确表示一个数字,例如0.1、0.2或0.3。
编译或解释代码时,“ 0.1”已经四舍五入为该格式的最接近的数字,即使在计算之前,也会产生较小的舍入误差。
这就是为什么程序员说您应该只将钱存储为整数的原因。例如int cents = 1995;
而不是float dollars = 19.95
。
如果您的应用程序不需要100%精确(例如,如果您正在计算屏幕坐标,半透明性或颜色),则只需将浮点数的格式四舍五入为1或2个小数位即可:
double someValue = 1912/10.0;
NSLog(@"2 decimals: %.2f", someValue);
NSLog(@"0 decimals: %.0f", someValue);
此代码将输出:
2位小数:191.20
0位小数:191
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句