【发布时间】:2012-03-10 14:44:50
【问题描述】:
我在格式化大数字时遇到问题。
我首先将一个字符串格式化为一个数字,因为我需要保存一个字符串,所以我从中获取 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 我明白了: “号码:1234567456785921” "字符串翻译:1234567456785920"
这是 nsnumberformatter 的内在限制吗,因为文档没有说明这一点,或者我做错了什么?
【问题讨论】:
标签: objective-c ios cocoa-touch