NSDecimalNumber 比较失败
Posted
技术标签:
【中文标题】NSDecimalNumber 比较失败【英文标题】:NSDecimalNumber compare fails 【发布时间】:2012-07-31 21:08:13 【问题描述】:为什么是result
NSOrderedDescending
?
NSDecimalNumber *decimal = [[NSDecimalNumber alloc] initWithString:@"2.6"];
NSComparisonResult result = [decimal compare:[NSNumber numberWithFloat:2.6]];
【问题讨论】:
我敢打赌这是一个内部舍入问题。你试过@"2.60" 和 2.6 吗? 谢谢马克。以为我使用 NSDecimalNumber 很聪明,但这个舍入错误的事情运行得更深。最终使用 NSDecimal。 【参考方案1】:2.6
不能准确地表示为浮点数,但NSDecimal
可以准确地表示这个值(这就是我们首先需要 NSDecimals 的原因)。
根据IEEE 754 Calculator,2.6
转换为2.5999999046325684
,小于2.6
,因此与NSOrderedDescending
进行比较。
【讨论】:
使用 NSDecimal 作品。我还使用了来自***.com/questions/2035421/creating-nsdecimal 的方便的 CPDecimalFromString以上是关于NSDecimalNumber 比较失败的主要内容,如果未能解决你的问题,请参考以下文章
比较 NSDecimalNumber 和 NSNumber 得到错误的结果