我想对浮点值执行一些计算,问题是它返回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,我正在寻找两个值的基本划分,这可能是什么问题?
答案 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