web-dev-qa-db-fra.com

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

Xcode 8.0 (8A218a) GM
Target: iOS 10 (Swift 3)

Considérons le code suivant:

let number = NSDecimalNumber(decimal: 22.4)

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current

let result = numberFormatter.string(from: number)
print(result!)

Le résultat est:

¤22.40

(Je ne sais pas ce que signifie ¤.)

Mais si j'initialise les paramètres régionaux tels que:

numberFormatter.locale = Locale(identifier: "en_US")

Le résultat sera:

$22.40

... ce à quoi je m'attendais en premier lieu.

Notez que cela fonctionne dans un terrain de jeu où:

 enter image description here

Le problème semble se produire uniquement sur les appareils/simulateurs via le lancement de Xcode.
(J'ai testé sur deux macOS différents - sur mon lieu de travail et à la maison.)

Des idées sur ce qui se passe?

8
backslash-f

Répondant à ma propre question: recréer le projet. : \

Le projet a été démarré sous Xcode 7 + Swift 2, puis "migré" vers Xcode 8 + Swift 3 (manuellement). Quelque chose a mal tourné. Je ne sais pas quoi (et je ne veux pas savoir).

Ce n'était pas un projet énorme, alors j'ai passé environ 40 minutes à déplacer des fichiers. Si c'était un gros projet, je serais f .... d maintenant.

Xcode pls.

1
backslash-f

J'ai les mêmes problèmes et je le résous par le code ci-dessous. J'espère que c'est utile

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

Cela m’arrivait dans le simulateur, s’avère que c’est une erreur dans la configuration de mon schéma. Commander les étapes suivantes:

  1. Cliquez sur Set Active Scheme (cliquez directement à gauche du type de simulateur, par exemple iPhone 7 Plus, etc.).
  2. Cliquez sur Edit Scheme ...
  3. Cliquez dans Exécuter paramètres à gauche
  4. Définir Région d'application vers la région souhaitée
  5. Définir Langue d'application vers la langue souhaitée
  6. Essayez de relancer votre application, elle ne devrait plus afficher le symbole "¤" mais devrait refléter le symbole monétaire correct.
1
D. Pratt

Je pense que la langue de votre appareil est le chinois C’est pourquoi le symbole ¤ est représenté par le symbole monétaire.

0
apexa chovatiya