在浮动分区上获得NaN

时间:2015-04-17 06:19:56

标签: ios objective-c

我想对浮点值执行一些计算,问题是它返回NaN,这是我正在尝试的

float totalRatingCount = users.count;
float score = 0.0;
for (NSManagedObject *managedObj in users) {
    User_agent_rating *user = (User_agent_rating*)managedObj;
    score = score + [user.status.score floatValue];
}
//float scoreInFloat = (float)score/(float)totalRatingCount;
float scoreInFloat = score/totalRatingCount;

scoreInFloat几乎在所有情况下都返回NaN,我正在寻找两个值的基本划分,这可能是什么问题?

2 个答案:

答案 0 :(得分:1)

除以零(其他一些情况)会产生NaN结果(不是数字)。

要检查NaN,请将相同的值与自身进行比较,并为NaN返回false。

if(scoreInFloat != scoreInFloat) isNaN = YES

答案 1 :(得分:1)

我重构一下,使用关键值编码的精彩运算符:

 #include <math.h>
    float scoreInFloat = [[users valueForKeyPath:@"@avg.status.score"] floatValue];
    if (isnan(scoreInFloat)) {
        // handle nan here
    }
    else {

    }

我在没有检查的情况下写作,因此可能会有很少的错误 KVC有各种运营商,如:@ sum,@ count等 您的操作是正确的,但这更具有同步性和可读性。 Check more here