NSNumber doubleValue 0 不完全返回 0
Posted
技术标签:
【中文标题】NSNumber doubleValue 0 不完全返回 0【英文标题】:NSNumber doubleValue 0 doesn't return exactly 0 【发布时间】:2013-01-02 10:42:51 【问题描述】:我正在处理一个 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
【问题讨论】:
如果你在NSLog
调用中使用%lf
会发生什么?
What every computer scientists should know about floating point arithmetic?
我刚刚做了,控制台打印了同样的内容:code
2013-01-02 11:50:03.208 myApp[2014:c07] max 0.000000
if(max
@Krishnabhadra 这是一个关于我在学校学习的理论的非常有趣的链接。更新仍然很有帮助 thx :)。所以如果我写“if(max
【参考方案1】:
这不是错误:它是双精度。对于浮点数,您看到的不一定是您得到的。这个问题有更多信息:
Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273?
如果您只关心一个数字是等于还是大于零,那么最简单的解决方案就是转换为整数。还有其他更复杂的替代方案:我链接到的答案有一些。有人在 cmets 中为您提供的有关浮点数学的链接也可能会有所帮助。
【讨论】:
谢谢,两个链接都有帮助!以上是关于NSNumber doubleValue 0 不完全返回 0的主要内容,如果未能解决你的问题,请参考以下文章
使用NSExpression expressionForSubquery有条件地对数据求和
Java 6 和 Java 8 之间的 Java BigDecimal.doubleValue
NSNumber 为 0 转换为 NSInteger/NSUInteger 变为 nil