【发布时间】:2018-05-28 13:28:49
【问题描述】:
代码很简单,可以复现。
NSDecimalNumber *d1 = [NSDecimalNumber decimalNumberWithString:@"6560601600245628933"];
BOOL res = [d1 isEqualToNumber:@(6560601600245628934)];
NSLog(@"%@", @(res));
isEqualToNumber: 总是返回YES,即使我将d1 与@6560601600245628930 等其他数字进行比较...有什么想法吗?是bug吗?
【问题讨论】:
-
我认为这里正在对对象的类型进行比较。试试号码 6560601600245。
-
在比较
NSNumber和NSDecimalNumber时,这似乎是一个精度问题。如果两个值都是NSDecimalNumber,您将得到正确的结果。如果数字中的数字少一位,则使用当前代码得到正确的结果。 -
对不起,我的意思是如果数字少 3 位,您当前的代码就可以了。这意味着它适用于 16 位数字,但不能更多。这本质上是
double的精度,所以看起来在比较NSNumber时,比较的值是double。
标签: ios objective-c nsnumber nsdecimalnumber