2010-02-28 18 views
0

Excuses si c'est une question stupide mais j'essaye de formater une valeur de devise pour mon application d'iphone et je me bats pour justifier le symbole de devise, mais bon- justifier la valeur. Ainsi, "$ 123.45" est formaté comme (disons) Utilisation de NSNumberFormatter pour remplir les espaces entre un symbole de devise et la valeur

$ 123.45
en fonction de la largeur du format. C'est une sorte de format de comptabilité (je pense).

J'ai essayé différentes méthodes avec NSNumberFormatter mais je ne peux pas obtenir ce dont j'ai besoin.

Quelqu'un peut-il vous conseiller sur la façon de faire cela?

Merci

Fitto

Répondre

3

Vous êtes à la recherche de la propriété paddingPosition de NSNumberFormatter. Vous devez définir ceci sur NSNumberFormatterPadAfterPrefix pour le format désiré.

+0

Brillant. A travaillé un régal. Merci – Fittoburst

+0

Il est important de noter que cela ne fonctionne que lorsque formatWidth est défini, selon la question. – philippe

0

Cela n'a pas fonctionné pour moi. J'ai été en mesure d'ajouter un espace entre le symbole monétaire et le montant en faisant cela.

Swift 3,0

currencyFormatter.negativePrefix = "\(currencyFormatter.negativePrefix!) " 
currencyFormatter.positivePrefix = "\(currencyFormatter.positivePrefix!) " 

Code complet:

extension Int { 
    func amountStringInCurrency(currencyCode: String) -> (str: String, nr: Double) { 
     let currencyFormatter = NumberFormatter() 
     currencyFormatter.usesGroupingSeparator = true 
     currencyFormatter.numberStyle = NumberFormatter.Style.currency 
     currencyFormatter.currencyCode = currencyCode 
     currencyFormatter.negativePrefix = "\(currencyFormatter.negativePrefix!) " 
     currencyFormatter.positivePrefix = "\(currencyFormatter.positivePrefix!) " 

     let nrOfDigits = currencyFormatter.maximumFractionDigits 
     let number: Double = Double(self)/pow(10, Double(nrOfDigits)) 
     return (currencyFormatter.string(from: NSNumber(value: number))!, number) 
    } 
} 

Cette extension est un Int qui exprime le montant MinorUnits. C'est à dire. USD est exprimé avec 2 chiffres, alors que le yen japonais est exprimé sans chiffres. Voilà donc ce que cette extension serait de retour:

let amountInMinorUnits: Int = 1234 
amountInMinorUnits.amountStringInCurrency(currencyCode: "USD").str // $ 12.34 
amountInMinorUnits.amountStringInCurrency(currencyCode: "JPY").str // JP¥ 1,234 

Les mille et séparateur décimal sont déterminés par les paramètres régionaux utilisateurs.