【问题标题】:Why is my NSDecimalNumber's boolValue NO on iOS 7, but YES on iOS 8?为什么我的 NSDecimalNumber 的 boolValue 在 iOS 7 上为 NO,但在 iOS 8 上为 YES?
【发布时间】:2016-01-26 17:33:03
【问题描述】:

我有一个 NSDecimalNumber 代表 0.5,声明和调试如下:

NSDecimalNumber *myNumber = [NSDecimalNumber numberWithDouble:0.5];
NSLog(@"Bool value: %@", myNumber.boolValue ? @"YES" : @"NO");

在 iOS 7.1.1 上,我明白了:

2016-01-26 11:11:19.878 MyApp[467:60b] Bool value: NO

在 iOS 8.4.1 上,我得到了这个:

2016-01-26 11:15:42.128 MyApp[467:60b] Bool value: YES

【问题讨论】:

    标签: objective-c ios7 ios8 boolean nsdecimalnumber


    【解决方案1】:

    在 iOS 7 中,如果数字的整数部分等于 0,则 -[NSDecimalNumber boolValue] 方法将返回 NO,否则返回 YES。在 iOS 8 中,这已更改为与其他 NSNumbers 一致,并查看整数,因此只有完全等于 0 的值才会返回 NO

    您可以通过 LLDB 控制台看到这一点:

    iOS 7

    iOS 8


    解决方法

    一个简单的解决方法是使其更具语义化。 您要做什么?您可能只想知道NSDecimalNumber 中的值是否非零。在这种情况下,请改用它:

    NSLog(@"Is decimal number non-zero? %@", [myNumber compare:@0] != NSOrderedSame ? @"YES", @"NO");
    

    或者如果你想检查它是否已经设置:

    NSLog(@"Is decimal number set? %@", myNumber ? @"YES", @"NO");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      相关资源
      最近更新 更多