【问题标题】:Swift 3 and NumberFormatter (.currency) == ¤?Swift 3 和 NumberFormatter (.currency) == ¤?
【发布时间】:2017-01-20 08:17:03
【问题描述】:

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 中使用:

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

有什么想法吗?

【问题讨论】:

  • 您当前的语言环境是什么?
  • Locale.current 给你什么?
  • 另一个选项是不设置格式化程序的locale 属性。它将默认为您当前的语言环境,因此没有任何理由将其设置为当前语言环境。
  • 我可以确认这在 Playground 中有效,但不能通过模拟器/设备上的 Xcode。我用这个信息更新了我的问题。
  • ¤ 字符是 Unicode“货币符号”字符。如果语言环境没有任何信息要使用哪种货币或如何显示它,则该字符将用于显示货币。

标签: ios locale swift3 ios10 nsnumberformatter


【解决方案1】:

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

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

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

请Xcode。

【讨论】:

    【解决方案2】:

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

    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!
    }
    

    【讨论】:

    • 手动设置最大小数位数不是一个好主意,因为它们从 0 到 3 不等。应根据语言环境设置位数。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 事实并非如此。该设备是/被设置为 en-US。
      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多