NSNumberFormatter最多只能格式化14位有效数字

时间:2016-05-19 04:51:26

标签: ios precision nsnumberformatter

我看到一些代码尝试使用以下NSNumberFormatter格式化lat long。

NSNumberFormatter * sut = [[NSNumberFormatter alloc] init];
[sut setMaximumFractionDigits:20]; // also tried set to 15 or 16, not working too.
[sut setMaximumSignificantDigits:20];

NSLocale *enUSPOSIXLocale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[sut setLocale:enUSPOSIXLocale];

NSString *expected = @"1.299129258067496"; // 16 significants digits
NSString *actual = [sut stringFromNumber:@(1.299129258067496)];

[[actual should] equal:expected];// Failed to pass, the actual is @"1.2991292580675"

虽然在这种情况下,我们可能不需要使用NSNumberFormatter来获得正确的结果,但我想知道为什么NSNumberFormatter只返回最多14位有效数字的字符串。

1 个答案:

答案 0 :(得分:1)

它只显示14位小数,因为double类型在15位小数处舍入。这对我有用,因为你可以设置显示的小数位数。

[NSString stringWithFormat:@"%.20f", 1.299129258067496]

确保小数位数不超过该数字,否则程序会补充数字以填补其余数字。希望这会有所帮助。