【问题标题】:iOS 13 NSNumberFormatter currency decimaliOS 13 NSNumberFormatter 货币小数
【发布时间】:2026-01-14 20:40:01
【问题描述】:

似乎在 iOS 13 中它改变了 NSNumberFormatter 显示数字的方式。 之前在 iOS 12 中,将区域格式设置为哥伦比亚,对于 12.00 的数字,它会显示为 12,这是正确的。 但是现在在 iOS 13 中,它显示为 12,00,这是不正确的,因为在哥伦比亚它不应该在 12 的后面显示 ,00。 知道 iOS 13 中发生了什么变化以及我们如何解决这个问题吗?

这是我的代码。谢谢!

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setCurrencySymbol:@""]; 
NSString *floatString = [NSString stringWithFormat:@"%.2f", floatValue];
NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:floatString];
NSString *numberString = [formatter stringFromNumber:number];
NSLog(@"%@", numberString");

更新:更新至 iOS 13.2 后,此问题消失。

【问题讨论】:

  • 我将您的代码放入一个简单的 Objective-C 项目并在 iOS 13.2 下运行它,我得到一个简单的12 用于输出。我将格式化程序的语言环境设置为 es_CO 以模拟在哥伦比亚。
  • 但是在iOS12中,格式化器的locale不需要设置为es_CO,应该是自动的。
  • 我需要将语言环境设置为 es_CO 以进行测试,因为这不是我的默认语言环境。
  • 明白这一点,但这段代码的目的是每个人都应该根据他们的 iPad 区域设置以自己的格式查看他们的货币。如果我们必须手动设置语言环境,那就达不到目的了。
  • 这似乎与iOS 13.1有关,更新到13.2后问题消失了。感谢您的帮助。

标签: objective-c ios13 nsnumberformatter


【解决方案1】:

在 iOS 13.1 中,当您使用不同的小数点而不是 .其他任何事情。

例如:我的语言环境是波兰。所以如果我有amountString =“4.5”。以下代码总是返回 nil。

let currencyFormatter = NumberFormatter()
currencyFormatter.currencySymbol = ""
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = Locale.current
if let finalNumber = currencyFormatter.number(from: amountString){
    return finalNumber.doubleValue
}
return nil

【讨论】: