我是Obj-C的菜鸟,但今天我遇到了一些我自己无法理解的东西,包括NSNumber和intValue。
我有这个示例代码:
double quota = 203/100.0;
NSLog(@"%f %f %@ %d",
quota,
quota*100.0,
[NSNumber numberWithDouble:(quota*100.0)],
[ [NSNumber numberWithDouble:(quota*100.0)] intValue]
);
打印输出:
2.030000 203.000000 203 202
请有人帮助我理解为什么最终的intValue会在202中变成203? 我觉得我错过了一些非常明显和重要的东西。
TIA
答案 0 :(得分:4)
我运行你的代码,结果是203 / 100.0 = 2.0299999999999998,同时存储为double。它看起来像NSNumber
以及%f在打印时将其四舍五入为2.03但是当你获得202.99999999999998的int值时,正在删除.99999999999998。希望有人(或我的自我编辑)可以添加为什么在打印双值时发生这种舍入行为。