对NSDecimalNumber有点困惑



有一个短代码

    NSString *numString = @"2128.123123";
    NSDecimalNumber *large = [NSDecimalNumber decimalNumberWithString:numString];
    NSDecimalNumberHandler *decimalHandler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
    NSDecimalNumber *fin = [large decimalNumberByRoundingAccordingToBehavior:decimalHandler];
    NSLog(@"%@",fin);

看起来不错,打印"2128.12"。

但您可以尝试numString=@"78.991";

NSLog(@"%@",fin)

打印"78.98999999999999"…

为什么规模是无效的?预期为"78.99">


fin可以,但NSLog调用doubleValue。在macOS的早期版本中,NSLog确实调用了description,返回"78.99"。解决方案:NSLog(@"%@", fin.description)

最新更新