ios - 按国家/地区代码将 NSDecimalNumber 格式化为货币,且不损失精度

标签 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];
}

当我传入包含 678071967196719797153475347466.94627863NSDecimalNumber* 时,它会被格式化为 ¥678,072,000,000,000,000,000,000,000,000 (使用 货币代码 设置为日元)。如果我省略了 formatter.usesSignificantDigits = YES 行,那么它会被格式化为 ¥678,071,967,196,719,797,153,475,347,467,更接近,但仍然会删除小数和以下值。

但是,当我传入 6780.0416000000012517376 时,它的格式正确¥6,780.04,并带有有效数字行。它的格式为¥6,780,没有有效数字行。

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

如何在不损失精度的情况下使用货币代码格式化 NSDecimalNumbers?

谢谢

最佳答案

尝试设置最小小数位数:

formatter.minimumFractionDigits = 2;

HTH

关于ios - 按国家/地区代码将 NSDecimalNumber 格式化为货币,且不损失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36876181/

相关文章:

objective-c - 查明函数参数是否是函数调用的一部分

ios - 错误 : The file. ..在 imageData 上调用 writeToFile 时不存在

objective-c - NSURLConnection 获取 JSON 文件

ios - 在 UITextField 输入 4 个整数后添加空格时崩溃

ios - Swift 中的单例和 NSNumberFormatter

swift - NSTableView 中的子类 NumberFormatter 未格式化

ios - 具有 cocoa touch 的自定义 UI 元素

android - 是否可以将 Phonegap 嵌入 native 应用程序中?

ios - SpeechKit 所需条件为 false : IsFormatSampleRateAndChannelCountValid(format)

ios - 以编程方式锁定 iPhone 和 iPad 屏幕