NSNumbers及其价值表示问题

时间:2016-07-05 05:30:33

标签: ios objective-c double floating-accuracy nsnumber

解释为什么这不是那个指向Q& A!的重复:

我遇到了与Objective-C次要实现相关的问题,NSNumber类型具有不同的浮点精度,我只需知道实际发生了什么,我该怎么做才能解决这个问题。这个指向Q& A并不足以回答我的问题。

注意:这不是关于值的类型用法。我很难理解NSNumbers的行为。

我有这个非常简单的方法,基本上使用NSNumber

+ (NSNumber*)addNumber:(NSNumber*)firstNumber withSecondNumber:(NSNumber*)secondNumber {
    NSNumber *result = [NSNumber numberWithDouble:([firstNumber doubleValue] + [secondNumber doubleValue])];
    NSLog(@"Result: %@", result);   // This will print out our result for testing
    return result;
}

因此,如果我使用如下参数调用此方法:

[Fundamentals addNumber:[NSNumber numberWithDouble:5.0]
       withSecondNumber:[NSNumber numberWithDouble:3.5]];

印刷输出:8.5 --->正是我所期待的

但如果我用以下参数调用此方法:

[Fundamentals addNumber:[NSNumber numberWithDouble:50.0]
       withSecondNumber:[NSNumber numberWithDouble:36.54]];

打印出以下内容:86.53999999999999 --->这给我带来了困扰,仍然让我感到惊讶并质疑我的大脑直到它受伤! :(

注意:不仅在打印时,即使在调试器中,它也会显示上面打印的值表示。

有人可以解释一下吗?

先谢谢!

1 个答案:

答案 0 :(得分:0)

要格式化浮点数,可以使用NSNumberFormatter

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];

NSLog(@"Result...%@",numberString);//Result 22.37