我已经配置了一个NSNumberFormatter来将在NSDictionary中存储为美分的金额转换为欧元。因为它们存储为美分,所以我将格式化程序的multiplier
设置为[NSNumber numberWithDouble:0.01]
。但是,当我尝试显示304欧元分为欧元时,我获得€ 3,00
。NSNumberFormatter的乘数向下舍入而不是显示分数
这使我相信乘数是做整数除法而不是双重除法。
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
我该如何阻止异常行为?
最后我自己发现了这一点,但它是完全正确。那谢谢啦!你介意阐述为什么NSNumber在传递一个整数时作为一个整数而不是一个普通数字?无法理解这一部分(也是我为什么如此困惑)。 – SpacyRicochet
作为目标c不支持自动拳击。 NSNumber是一个指针表示(包装类)。因此,在创建NSNumber对象之前,需要使用[NSNumber numberWithType:value];指定值的类型。 – iOSPawan
这很有道理。谢谢! – SpacyRicochet