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 不起作用?

比较 NSDecimalNumber 和 NSNumber 得到错误的结果

如果 NSDecimalNumber 大于 Uint64,如何将 NSDecimalNumber 转换为字节数组?

将 NSDecimalNumber 变为负数

对 NSDecimalNumber 有点困惑?

在 NSDecimalNumber 的索引处查找数字