Почему этот NSNumberFormatter не отображает все дробные цифры? - PullRequest
0 голосов
/ 24 августа 2009

У меня есть экземпляр NSNumberFormatter, подобный этому:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setAlwaysShowsDecimalSeparator:NO];
[formatter setAllowsFloats:YES];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setMinimumFractionDigits:0];
[formatter setNumberStyle:kCFNumberFormatterDecimalStyle];

Затем я предоставляю значение, подобное этому, и печатаю его:

NSNumber *number = [NSNumber numberWithFloat:4932.79661];
NSLog(@"%@", [formatter stringFromNumber:number]);

Что я получаю:

4,932.796

пропущено 2 цифры. Теперь странная вещь: если я сделаю число намного больше, то есть 49328324.79661, я получу только 2 дробных цифры. Есть идеи, что может быть не так с форматером? Должен ли я явно указать, чтобы он использовал определенную точность?

Ответы [ 2 ]

1 голос
/ 24 августа 2009

Попробуйте установить:

[formatter setMaximumFractionDigits:20];

помните, что числа с плавающей запятой не могут быть на 100% точными для внутреннего представления. Так, например, вывод из вашей программы выше будет:

4,932.79638671875
0 голосов
/ 24 августа 2009

Я не эксперт здесь, но я считаю, что числа с плавающей запятой ограничены 7 значащими цифрами. У вас есть 9. Кто-то может исправить меня, если я ошибаюсь. Вы можете использовать двойное или даже лучше NSDecimalNumber и не создавать его из числа с плавающей точкой, а из одного из другие инициализаторы. Возможно, decimalNumberWithString или decimalNumberWithDecimal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...