我有一个NSNumber数组(在这种情况下,为简单起见,我只有一个元素)
阵列是" _incassiInDistinta"包含一个对象" Incasso"它有一个属性" _importoIncassato"
现在如果我使用这个
double sum = [[_incassiInDistinta valueForKeyPath:@"@sum.importoIncassato"] doubleValue];
变量" sum"我的价值如下:
如果您通过此方法运行求和变量" sum"就是这样:
NSArray *importi = [_incassiInDistinta valueForKeyPath:@"importoIncassato"];
__block double sum = 0;
[importi enumerateObjectsUsingBlock:^(NSNumber *op, NSUInteger idx, BOOL *stop) {
sum = sum + [op doubleValue];
}];
如何获得正确的值? 感谢
编辑:
我必须在if
中比较sum变量if(sum> = 1373.63).....
不起作用
答案 0 :(得分:1)
您的差异只是浮动值的二进制近似值,您的两个结果之间大约1e-13并不担心。一篇关于浮点表示的文章here。
如果您确实需要精确的十进制数(例如货币),则可以使用NSDecimalNumber。但只有在必要时才使用它们,它们会使一切变慢。
答案 1 :(得分:0)
这是我用于上述问题的黑客攻击。
将double
转换为NSString
并向上舍入到小数点后两位。
然后再次将其从double
转换为NSString
。这将为您提供所需的结果。试试吧。
NSString *roundUp = [NSString stringWithFormat:@"%0.2f",sum];
double finalValue = [roundUp doubleValue];
double fixValue = 1373.63;
if (finalValue == fixValue) {
NSLog(@"Both values are same");
}