3

我正在尝试从长值正确显示格式正确的货币。我正在使用 NSNumberFormatter 但它似乎切断了美分所在的小数位。

例如,如果我有一个 1203(美分)的长值,我希望它具有定点格式(如 12.03)。这是我所做的:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = "USD";
formatter.multiplier = [NSNumber numberWithDouble:0.01];
long currencyAmount = 1203;
NSNumber *number = [NSNumber numberWithLongLong:currencyAmount];
[label setText:[formatter stringFromNumber:number]];

我得到这个输出 12.00 美元,但我想要 12.03 美元

4

2 回答 2

2

想到其中的整数截止错误NSNumberFormatter是疯狂的猜测,但是您是否尝试过默认乘数 1 并将转换后的货币金额除以 100 自己?

编辑:对于这种解决方法,以下帖子建议使用NSDecimalNumber以避免舍入问题。NSNumberFormatter 格式化货币不适用于浮点数

于 2013-01-17T23:16:17.197 回答
1

我想出了答案。这将正确地将 long/long long 值格式化为货币。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = "USD";
long currencyAmount = 1203;
NSDecimalNumber *wrappedCurrencyAmount = [NSDecimalNumber decimalNumberWithMantissa:currencyAmount exponent:-2 isNegative:NO];
[label setText:[formatter stringFromNumber:wrappedCurrencyAmount]];
于 2013-01-17T23:46:07.187 回答