Question

Je souhaite changer mon NSNumberformatter, qui consiste à ne pas afficher les nombres négatifs entourés de parenthèses, mais à placer le signe moins devant (ou le format défini par la norme localisée).

Je suppose que je pourrais le faire avec setNegativeFormat:

mais en lisant les docs oh si minutieux d'Apple, il me reste à me gratter la tête

setNegativeFormat:

Définit le format utilisé par le récepteur pour afficher les valeurs négatives.

- (void)setNegativeFormat:(NSString *)aFormat

Paramètres un format Une chaîne spécifiant le format des valeurs négatives.

Disponibilité Disponible dans iPhone OS 2.0 et versions ultérieures.

Voir aussi & # 8211; format négatif

Déclaré dans NSNumberFormatter.h

Quelles sont mes options pour aFormat?!? Allez Doc Writers, un lien ici vous tuerait-il?

edit: pour ce que ça vaut, voici la déclaration:

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

Il est important pour moi de conserver le symbole monétaire localisé & amp; décimales quelles qu’elles soient. Ainsi, [currencyFormatter setNegativeFormat: @ "- #, ## 0.00"] ne fonctionnera probablement pas car la devise est manquante et deux décimales ne peuvent pas être utilisées pour toutes les devises.

Était-ce utile?

La solution

Si vous consultez les "Chaînes de format" " section de la Guide de programmation de la mise en forme des données pour le cacao :

  

La chaîne de format utilise les modèles de format de la norme technique Unicode n ° 35 (cette référence concerne la version tr35-6; les formateurs pour Mac OS X 10.4 utilisent la version tr35-4 ).

Modifier:

Si vous souhaitez définir une chaîne de format basée sur des devises, vous pouvez utiliser le caractère & # 164; , par exemple:

[formatter setFormat:@"¤#,##0.00"];

Ceci ajoutera le symbole monétaire de la localisation actuelle à la place du caractère & # 164; .

Par conséquent, appliquer le même concept à la chaîne de format négatif:

[formatter setFormat:@"-¤#,##0.00"];

Ceci appliquera également le symbole monétaire à la place du & # 164; pour la localisation en cours.

Autres conseils

OK, la réponse que j’ai obtenue est:

[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];

la clé est ce whatzit? caractère "& # 164;". Aucune idée de comment ça s'appelle? n'importe qui? mais il représente la devise localisée dans ces chaînes de format ...

Dans ce cas, il recherche un format NSString. Recherchez ici les détails de la chaîne de format .

Si vous souhaitez que le négatif de 12,345,67 soit affiché sous la forme -12 345,67 , je pense que la valeur correcte de NSString est @ " - #, ## 0.00 "

J'ai également noté la phrase suivante dans le document lié ci-dessus:

  

Si vous ne spécifiez pas de format pour   valeurs négatives, le format spécifié   pour les valeurs positives est utilisé, précédé   par un signe moins (-).

EDIT:
Mise à jour pour 10.4 et les versions suivantes: données sur les format pour 10.4 et après .
Dans ce document, il apparaît que la chaîne correcte peut être: @ "- #, ## 0. ##"

Toutes les réponses fournies supposent que la devise est à deux décimales et utilisent également des virgules comme séparateurs de milliers. De toute évidence, un certain nombre de devises ne sont pas conformes à cette norme, http://fr.wikipedia.org / wiki / Decimal_mark , j'utilise donc la technique suivante

    NSString * formattedBalance = [currencyFormatter stringFromNumber:balance];
    if([formattedBalance rangeOfString:@"("].location != NSNotFound ) {
        formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]];
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top