我正在研究iPhone的计算器应用程序。
在显示大于15位数的计算结果时,我遇到了使用NSNumberFormatter
的问题。
例如,计算结果 111,111,111,111,111 x 2 = 222,222,222,222,222 (正确)。但是,计算结果 1,111,111,111,111,111 x 2 = 2,222,222,222,220 (错!)。
使用NSNumberFormatter
可以显示多少位数是否有限制,或者有人可以告诉我为什么计算结果无法正确显示?
提前谢谢!
示例代码:
double absResult = fabs(_result);
NSLog(@"_result = %f", _result);
//_result is the result of the calculation that will be placed onto displayLabel below
// _result = 2,222,222,222,222,222 for the calculation 1,111,111,111,111,111 x 2
NSNumberFormatter *displayString = [[NSNumberFormatter alloc]init];
//** Adds zero before decimal point **
[displayString setMinimumIntegerDigits:1];
[displayString setUsesGroupingSeparator:YES];
[displayString setGroupingSeparator:@","];
[displayString setGroupingSize:3];
[displayString setMinimumFractionDigits:2];
[displayString setMaximumFractionDigits:2];
NSString *resultString = [displayString stringFromNumber:[NSNumber numberWithDouble: _result]];
self.displayLabel.text = resultString;
答案 0 :(得分:2)
这与NSNumberFormatter
的功能无关,但只与double
浮点数的精度有关。 double
类型使用8个字节来存储53位尾数和11位指数。请参阅Wikipedia article。
53位尾数太小而无法准确表示222,222,222,222,222,因此double
设置为最接近的可能表示。
如果你想要更高的精确度,你应该尝试NSDecimalNumber
,它更适合计算器应用程序。