我在格式化大数字时遇到了问题。
我首先将一个字符串格式化为一个数字,因为我需要保存一个字符串,所以我从它获得了stringValue:
formatter = [[NSNumberFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setUsesSignificantDigits:NO];
[formatter setMaximumFractionDigits:6];
[formatter setMinimumFractionDigits:0];
[formatter setGroupingSeparator:@""];
value = [formatter numberFromString:textField.text];
label = [value stringValue]一切正常,也就是说,如果我输入123456745678592.6,我会得到123456745678592.6。
然后,我必须格式化字符串,因为不同的语言环境:
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setGroupingSeparator:@""];
[numberFormatter setUsesSignificantDigits:NO];
[numberFormatter setMinimumFractionDigits:0];
[numberFormatter setMaximumFractionDigits:6];
tempString = myNumberString;
NSLog(@"number: %@",[NSNumber numberWithDouble:[tempString doubleValue]]);
tempString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:[tempString doubleValue]]];
NSLog(@"string translated: %@",tempString);我得到了这个:“数字: 123456745678592.6”“字符串翻译: 123456745678593”
当有意义的数字大于15时,就会发生这种舍入。
假设我输入: 12345674567859.2,然后我得到正确的数字,即“数字: 12345674567859.2”“字符串翻译: 12345674567859.2”
使用: 12345674567859.23我得到:“数字: 12345674567859.23”“字符串已翻译: 12345674567859.2”
但如果使用: 1234567456785921,我会得到这样的结果:"number: 1234567456785921“”字符串已翻译: 1234567456785920“
这是不是nothing格式化程序的固有限制,因为文档对此只字不提,还是我做错了什么?
发布于 2012-03-11 03:00:54
你能查查这个号码的实际类别是什么吗?是NSNumber还是NSDecimalNumber
NSNumber由double备份,其有效小数位数不能超过15位。另一方面,NSDecimalNumber使用十进制算术,最多可容纳32位有效数字。
我已经了解到NSDecimalFormatter无法正确地格式化NSDecimalNumber%s(请参阅iOS: formatting decimal numbers)。但是也许它可以从一个字符串正确地创建一个NSDecimalNumber。
发布于 2012-03-10 23:28:35
我认为问题不在于NSNumberFormatter的限制,而在于double本身的限制。
Objective-C中的双精度值的最大值是15位,我认为这是关于您的程序中发生的事情的一个很好的线索。
我认为当你这样做的时候
[NSNumber numberWithDouble:[tempString doubleValue]]];您正在限制NSNumber的值,因为doubleValue将有一个限制!
https://stackoverflow.com/questions/9647306
复制相似问题