按国家/地区代码将NSDecimalNumber格式化为货币而不会损失精度

时间:2016-04-26 21:33:44

标签: ios objective-c nsnumberformatter nsdecimalnumber currency-formatting

所以现在我有以下代码:

- (NSString*)convertToLocalCurrencyFormat:(NSDecimalNumber*)result {
  NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
  formatter.numberStyle = NSNumberFormatterCurrencyStyle;
  formatter.currencyCode = self.comparisonCurrency;
  formatter.usesSignificantDigits = YES;
  return [formatter stringFromNumber:result];
}

当我传入包含NSDecimalNumber*的{​​{1}}时,它会格式化为678071967196719797153475347466.94627863¥678,072,000,000,000,000,000,000,000,000设置为currencyCode)。如果我遗漏了JPY行,那么它会被格式化为formatter.usesSignificantDigits = YES,更接近,但仍会丢弃小数和后续值。

但是,当我传入¥678,071,967,196,719,797,153,475,347,467时,它已将格式正确格式化为6780.0416000000012517376,并带有有效数字行。它被格式化为¥6,780.04,没有有效数字行。

我知道NSNumberFormatter可以接受任何NSNumber作为参数,但只能处理与双精度一样精确的值,使NSDecimalNumber没有错误和不正确的结果。

如何使用货币代码格式化NSDecimalNumbers而不会损失精度?

由于

1 个答案:

答案 0 :(得分:3)

请尝试设置最小分数:

formatter.minimumFractionDigits = 2;

HTH