использование NSNumberFormatter с NSDecimalNumberHandler в SDK iphone - PullRequest
0 голосов
/ 10 июля 2009

как быстрый тест форматирования очень больших, точных чисел, которые я делаю:

(number is a synthesized NSDecimalNumber...)
number = [[NSDecimalNumber alloc] initWithDecimal:[[NSDecimalNumber numberWithDouble:420000008698643507200000.0F] decimalValue]];
DLog(@"unformatted: %@", [number stringValue]);

, что дает мне: «неотформатированный: 420000008698643507200000»

но когда я пытаюсь отформатировать его с помощью NSNumberFormatter, это совсем не так ... округление вверх или что-то ...

  numFormatter = [[NSNumberFormatter alloc] init];
  [numFormatter setNumberStyle:kCFNumberFormatterDecimalStyle];
  [numFormatter setRoundingMode:kCFNumberFormatterRoundDown];
  [numFormatter setMaximum:nil];

  DLog(@"formatted: %@", [numFormatter stringFromNumber:number]);

дает мне: "отформатировано: 420 000 008 698 644 000 000 000"

Я надеюсь, что есть какое-то секретное NSNumberFormatter магическое свойство, которого я не вижу, но я попробовал setUsesSignificantDigits и setMaximumSignificantDigits, но это не сработало.

У кого-нибудь есть идеи? спасибо большое!

1 Ответ

1 голос
/ 10 июля 2009

Ваша потеря точности происходит из-за того, что NSNumberFormatter преобразует число в двойное.

Рассматривали ли вы использовать NSDecimalNumber's descriptionWithLocale: метод? В качестве отправной точки вы можете просто ввести [NSLocale currentLocale] в качестве параметра. Затем вы можете начать играть с настройкой локали через NSLocaleDecimalSeparator и NSLocaleGroupingSeparator.

...