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

bac*_*h-f 8 locale nsnumberformatter ios swift3 ios10

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!)
Run Code Online (Sandbox Code Playgroud)

结果是:

¤22.40
Run Code Online (Sandbox Code Playgroud)

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

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

numberFormatter.locale = Locale(identifier: "en_US")
Run Code Online (Sandbox Code Playgroud)

结果将是:

$22.40
Run Code Online (Sandbox Code Playgroud)

......这首先是我所期待的.

请注意,这适用于Playground:

在此输入图像描述

问题似乎只发生在通过Xcode启动的设备/模拟器上.
(我在两个不同的macOS上测试 - 在我的工作场所和家中.)

关于发生了什么的任何想法?

Nam*_*ham 14

我有同样的问题,我通过下面的代码解决它.希望它有用

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!
}
Run Code Online (Sandbox Code Playgroud)


D. *_*att 5

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

\n\n
    \n
  1. 单击“设置活动方案”(直接单击模拟器类型的左侧,即 iPhone 7 Plus 等)
  2. \n
  3. 单击编辑方案...
  4. \n
  5. 点击左侧的运行设置
  6. \n
  7. 应用程序区域设置为所需区域
  8. \n
  9. 应用程序语言设置为所需语言
  10. \n
  11. 尝试再次运行您的应用程序,您不应再让它显示“\xc2\xa4”符号,而应反映正确的货币符号。
  12. \n
\n


bac*_*h-f 1

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

该项目在 Xcode 7 + Swift 2 中启动,然后“迁移”到 Xcode 8 + Swift 3(手动)。一定是出了什么问题。我不知道什么(我也不想知道)。

这不是一个大项目,所以我花了大约 40 分钟来移动文件。如果那是一个大项目,我现在就已经死了。

请使用Xcode。