使用NSNumberFormatter显示极大数字

时间:2014-12-09 22:47:16

标签: ios xcode nsnumberformatter

我正在研究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;

1 个答案:

答案 0 :(得分:2)

这与NSNumberFormatter的功能无关,但只与double浮点数的精度有关。 double类型使用8个字节来存储53位尾数和11位指数。请参阅Wikipedia article

53位尾数太小而无法准确表示222,222,222,222,222,因此double设置为最接近的可能表示。

如果你想要更高的精确度,你应该尝试NSDecimalNumber,它更适合计算器应用程序。