NSNumber doubleValue 0不会返回0

时间:2013-01-02 10:42:51

标签: ios nsnumber

我正在处理NSNumber的NSMutableArray,我遇到了一个奇怪的错误。 [NSNumber doubleValue](使用double 0构造)似乎不等于0.0。

错误出现在最简单的函数中:最大函数。

- (double) maxValY{
    double max = DBL_MIN;
    for (NSNumber *doubleNumber in arrayNumbers) {
            if (max<[doubleNumber doubleValue]){
                max = [doubleNumber doubleValue];
            }

    }

    NSLog(@"max %f",max);
    if(max <=0.0){
        NSLog(@"max is equal to 0");
        return 1;
    }else{
        NSLog(@"max is not equal to 0");
    }

    return max;
}

控制台打印:

2013-01-02 11:27:56.208 myApp[1920:c07] max 0.000000
2013-01-02 11:27:56.210 myApp[1920:c07] max is not equal to 0

1 个答案:

答案 0 :(得分:2)

这不是一个错误:它是双精度。使用浮点数,您看到的并不一定是您所获得的。这个问题有更多信息:

Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273?

最简单的解决方案是转换为整数,如果您关心的是数字是等于还是大于零。还有其他更复杂的选择:我所联系的答案有一些。某人在关于浮点数学的评论中给你的链接也可能有所帮助。