Swift 3 和 NumberFormatter (.currency) == ¤?

Swift 3 and NumberFormatter (.currency) == ¤?

Xcode 8.0 (8A218a) GM
目标:iOS 10 (Swift 3)

考虑以下代码:

let number = NSDecimalNumber(decimal: 22.4)

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current

let result = numberFormatter.string(from: number)
print(result!)

结果是:

¤22.40

(我不知道¤是什么意思。)

但是如果我初始化语言环境,例如:

numberFormatter.locale = Locale(identifier: "en_US")

结果将是:

.40

...这正是我首先期望的。

请注意,这在 Playground 中有效:

问题似乎只发生在 devices/simulators 通过 Xcode 启动。
(我在两个不同的 macOS 上进行了测试——在我的工作场所和家里。)

有什么想法吗?

回答我自己的问题:重新创建项目。 :\

项目开始于 Xcode 7 + Swift 2,然后 "migrated" 到 Xcode 8 + Swift 3(手动)。一定是出了什么问题。我不知道是什么(我也不想知道)。

这不是一个大项目,所以我花了大约 40 分钟来移动文件。如果那是一个大项目,我现在会 f....d。

Xcode请

我有同样的问题,我用下面的代码解决了。希望有用

func formatCurrency(value: Double) -> String {
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.maximumFractionDigits = 2
    formatter.locale = Locale(identifier: Locale.current.identifier)
    let result = formatter.string(from: value as NSNumber)
    return result!
}

这在模拟器中发生在我身上,事实证明这是我的方案设置中的错误。检查以下步骤:

  1. 点击 Set Active Scheme(直接点击模拟器类型的左侧,即 iPhone 7 Plus 等)
  2. 单击编辑方案...
  3. 点击进入左侧运行设置
  4. 应用区域设置为所需区域
  5. 应用程序语言设置为所需语言
  6. 再次尝试 运行 您的应用程序,您应该不会再显示“¤”符号,而应该反映正确的货币符号。

我认为您的设备语言设置为中文 这就是为什么 ¤ 符号显示为货币符号