У меня проблема с форматированием больших чисел.NSNumberFormatter iOS большое двойное значение
Я первый форматировать строку в число и так как мне нужно, чтобы сохранить строку, я получаю 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.2.2.2.2.2.2.2.2 Затем я получаю правильный номер, то есть "номер: 12345674567859,2" "строка перевода: +12345674567859,2"
с: +12345674567859,23 я получаю: "номер: 12345674567859,23" "строка перевода: 12345674567859,2"
но: я получаю это: "номер: 1234567456785921" "строка перевода: 1234567456785920"
это внутренняя граница nsnumberformatter, потому что в документации ничего не говорится об этом, или я делаю что-то неправильно?
Я думал об этом, но, как вы можете видеть в моем сообщении, NSLog (@ "number:% @", [NSNumber numberWithDouble: [tempString doubleValue]]); печатает правильное значение без какого-либо усечения.Он начинает усекать, когда цифры больше 16. – Cpu86
У вас пытались использовать [numberFormatter setMaxium:], то? Вы также можете получить доступ к максимальному значению и узнать его значение –
Я попробовал [numberFormatter setMaxium: nil], но ничего не изменилось. – Cpu86