Множитель NSNumberFormatter округляется вместо показа дроби - PullRequest
4 голосов
/ 23 января 2012

Я настроил NSNumberFormatter для преобразования сумм, которые хранятся в виде центов в NSDictionary в евро. Поскольку они хранятся в виде центов, я установил multiplier для форматера [NSNumber numberWithDouble:0.01]. Однако, когда я пытаюсь отобразить 304 евроцента как евро, я получаю € 3,00.

Это наводит меня на мысль, что множитель выполняет целочисленное деление вместо двойного деления.

Конфигурация NSFormatter

/** 
 Returns an NSNumberFormatter that can be used to display currency in euro's (as determined in The Netherlands).
 */
+ (NSNumberFormatter *)euroCurrencyFormatter 
{
    static NSNumberFormatter *numberFormatter = nil;
    @synchronized(self) {
        if (!numberFormatter) {
            numberFormatter = [[NSNumberFormatter alloc] init];
            [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
            [numberFormatter setMultiplier:[NSNumber numberWithDouble:0.01]];
            NSLocale *nlLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"];
            [numberFormatter setLocale:nlLocale];
            [nlLocale release];
        }
    }
    return numberFormatter;
}

Вызов NSFormatter

cell.detailTextLabel.text = [[NSNumberFormatter euroCurrencyFormatter] stringFromNumber:[breakdown valueForKey:@"VatAmount"]]; // The VAT amount would be 304.

Результат

€ 3,00

Как я могу остановить ошибочное поведение?

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Попробуйте этот код.

cell.detailTextLabel.text = [[NSNumberFormatter euroCurrencyFormatter] stringFromNumber:[NSNumber numberWithDouble:[[breakdown valueForKey:@"VatAmount"] doubleValue]]]; // The VAT amount would be 304.

Как будто вы передадите НДС в виде целого числа, вы всегда получите номер в формате int.

0 голосов
/ 23 января 2012

См. «Настройка поведения округления» справки NSNumberFormatter .

...