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
...そもそも私が期待していることです。
これはプレイグラウンドで機能することに注意してください:
この問題は、Xcodeの起動を介したデバイス/シミュレータでのみ発生するようです。
(私は2つの異なるmacOSでテストしました-職場と自宅で。)
何が起こっているのかについてのアイデアはありますか?
私自身の質問への回答:プロジェクトを再作成します。 :\
プロジェクトはXcode 7 + Swift 2から開始され、Xcode 8 + Swift 3(手動)に「移行」)で開始されました。問題が発生している可能性があります。私は何を知りません(そして知りたくありません)。
これは大規模なプロジェクトではなかったので、ファイルの移動に40分ほどかかりました。それが大きなプロジェクトだったら、私は今までにf .... dになるでしょう。
Xcode pls。
同じ問題があり、以下のコードで解決します。お役に立てれば幸いです
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!
}
これはシミュレーターで私に起こっていました、それは私のスキーム設定のエラーであったことがわかりました。次の手順を確認してください。
デバイスの言語が中国語に設定されているため、think記号が通貨記号として表示されていると思います