我已經配置了一個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