NSNumber和intValue:奇怪的行为

时间:2011-01-26 14:59:58

标签: objective-c nsnumber

我是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

1 个答案:

答案 0 :(得分:4)

我运行你的代码,结果是203 / 100.0 = 2.0299999999999998,同时存储为double。它看起来像NSNumber以及%f在打印时将其四舍五入为2.03但是当你获得202.99999999999998的int值时,正在删除.99999999999998。希望有人(或我的自我编辑)可以添加为什么在打印双值时发生这种舍入行为。