【发布时间】:2013-01-07 15:17:20
【问题描述】:
我正在尝试将 123456.567 这样的数字设为美元的 123,456.56 和任何其他货币的 123,456.567
我的代码是:
double fromAgainstJOD = amountVal * fromCurrency.SellRate;
double result = fromAgainstJOD / toCurrency.SellRate;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@","];
[formatter setGroupingSize:3];
[formatter setUsesGroupingSeparator:YES];
NSString* formattedString = [formatter stringFromNumber:[NSNumber numberWithDouble:result]];
if (toCurrency.SellRate == 0) {
result = 0;
}
if ([toCurrency.Code isEqualToString:@"USD"]) {
[resultLbl setText:[NSString stringWithFormat:@"%@ %0.2f", toCurrency.Code, result]];
} else {
[resultLbl setText:[NSString stringWithFormat:@"%@ %0.3f", toCurrency.Code, result]];
}
所以我想在 resultLbl 中为每个货币代码设置带有千位分隔符和小数部分的数字。 美元 => 2 分数 其他货币 => 3 分数
【问题讨论】:
-
对于任何货币都不要使用双精度。使用十进制类型,它是正确的格式。双重格式会导致操作过程中的资金损失。
-
双倍对我来说工作正常,所以以美元计算的结果将为 7384.550 但如果我想更改为 nsnumber,我需要将其显示为 7,384.550,我无法将其显示为 7,384.550 它显示为 7,384.55
-
在处理金钱时不应该使用浮点数。仅仅因为它适用于您的测试,并不意味着它总是正确的!请参阅:blog.plataformatec.com.br/2014/09/floating-point-and-currency
标签: ios objective-c formatting