web-dev-qa-db-ja.com

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

Xcode8.0(8A218a)GM
Target: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

...そもそも私が期待していることです。

これはプレイグラウンドで機能することに注意してください:

enter image description here

この問題は、Xcodeの起動を介したデバイス/シミュレータでのみ発生するようです。
(私は2つの異なるmacOSでテストしました-職場と自宅で。)

何が起こっているのかについてのアイデアはありますか?

9
backslash-f

私自身の質問への回答:プロジェクトを再作成します。 :\

プロジェクトはXcode 7 + Swift 2から開始され、Xcode 8 + Swift 3(手動)に「移行」)で開始されました。問題が発生している可能性があります。私は何を知りません(そして知りたくありません)。

これは大規模なプロジェクトではなかったので、ファイルの移動に40分ほどかかりました。それが大きなプロジェクトだったら、私は今までにf .... dになるでしょう。

Xcode pls。

1
backslash-f

同じ問題があり、以下のコードで解決します。お役に立てれば幸いです

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!
}
14
Nam Pham

これはシミュレーターで私に起こっていました、それは私のスキーム設定のエラーであったことがわかりました。次の手順を確認してください。

  1. [アクティブスキームの設定]をクリックします(シミュレータタイプの左側(iPhone 7 Plusなど)のすぐ左をクリックします)。
  2. クリックスキームの編集...
  3. 左側のRun設定をクリックします
  4. アプリケーション領域を目的の領域に設定します
  5. アプリケーション言語を希望の言語に設定します
  6. アプリケーションをもう一度実行してみてください。「¤」記号が表示されなくなり、代わりに正しい通貨記号が反映されます。
2
D. Pratt

デバイスの言語が中国語に設定されているため、think記号が通貨記号として表示されていると思います

0
apexa chovatiya