0

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

该错误出现在有史以来最简单的函数中:max 函数。

- (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
4

1 回答 1

2

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

为什么我看到一个双变量初始化为 21.4 之类的某个值作为 21.399999618530273?

如果您只关心一个数字是否等于或大于零,那么最简单的解决方案就是转换为一个整数。还有其他更复杂的替代方案:我链接到的答案有一些。某人在有关浮点数学的评论中给您的链接也可能会有所帮助。

于 2013-01-02T10:52:44.623 回答