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

时间:2016-09-12 20:06:17

标签: ios locale swift3 ios10 nsnumberformatter

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")

结果将是:

$22.40

......这是我首先想到的。

请注意,这适用于Playground:

enter image description here

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

有关正在发生的事情的任何想法?

4 个答案:

答案 0 :(得分: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!
}

答案 1 :(得分:1)

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

该项目在Xcode 7 + Swift 2中启动,然后"迁移"到Xcode 8 + Swift 3(手动)。一定有问题。我不知道(我不想知道)。

这不是一个庞大的项目,所以我花了40分钟左右移动文件。如果这是一个很大的项目,我现在就是这样。

Xcode请

答案 2 :(得分:1)

我在模拟器中发生这种情况,原来这是我的方案设置中的一个错误。检查以下步骤:

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

答案 3 :(得分:0)

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