按国家代码将 NSDecimalNumber 格式化为货币而不丢失精度
Format NSDecimalNumber to currency by country code without loss of precision
所以现在我有以下代码:
- (NSString*)convertToLocalCurrencyFormat:(NSDecimalNumber*)result {
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = self.comparisonCurrency;
formatter.usesSignificantDigits = YES;
return [formatter stringFromNumber:result];
}
当我传入包含 678071967196719797153475347466.94627863
的 NSDecimalNumber*
时,它被格式化为 ¥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
有效数字行。它被格式化为 ¥6,780
,没有有效数字行。
我知道 NSNumberFormatter 可以接受任何 NSNumber 作为参数,但只能处理精确到双精度的值,而 NSDecimalNumber 没有错误和不正确的结果。
如何在不损失精度的情况下使用货币代码格式化 NSDecimalNumbers?
谢谢
尝试设置最小小数位数:
formatter.minimumFractionDigits = 2;
HTH
所以现在我有以下代码:
- (NSString*)convertToLocalCurrencyFormat:(NSDecimalNumber*)result {
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.currencyCode = self.comparisonCurrency;
formatter.usesSignificantDigits = YES;
return [formatter stringFromNumber:result];
}
当我传入包含 678071967196719797153475347466.94627863
的 NSDecimalNumber*
时,它被格式化为 ¥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
有效数字行。它被格式化为 ¥6,780
,没有有效数字行。
我知道 NSNumberFormatter 可以接受任何 NSNumber 作为参数,但只能处理精确到双精度的值,而 NSDecimalNumber 没有错误和不正确的结果。
如何在不损失精度的情况下使用货币代码格式化 NSDecimalNumbers?
谢谢
尝试设置最小小数位数:
formatter.minimumFractionDigits = 2;
HTH