解释为什么这不是那个指向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 --->这给我带来了困扰,仍然让我感到惊讶并质疑我的大脑直到它受伤! :(
注意:不仅在打印时,即使在调试器中,它也会显示上面打印的值表示。
有人可以解释一下吗?
先谢谢!
答案 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