2010-03-03 6 views
3

Je suis un N00b ici.Comment utiliser NSNumberFormatter pour la devise à imprimer dans UITextField

j'imprimer ma devise comme ceci:

-(IBAction)buttonPressed1:(id)sender 
    { 
     double currency = [Amount1.text doubleValue] + [Amount2.text doubleValue]; 
     SumCurrency.text = [NSString stringWithFormat:@"%0.0f", answer]; 
    } 

Je viens souhaitez simplement utiliser NSSNumberFormatter pour imprimer le SumCurrency.text au format Monnaie américaine .. Avoir beaucoup de mal avec elle ..Please hekp

même numéro ??? http://groups.jonzu.com/z_apple_using-a-nsnumberformatter-with-a-uitextfield.html

Merci à l'avance.

Cordialement, n00b

Répondre

16

Je suis la réponse .. Mais pour référence future de quelqu'un

-(IBAction)buttonPressed1:(id)sender { 
    double currency = [Amount1.text doubleValue] + [Amount2.text doubleValue]; 
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];     
    [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle]; 
    NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:currency]]; 
    SumCurrency.text = [NSString stringWithFormat:@"Converted:%@",numberAsString]; 
} 

ou, à Swift:

let amount = 123.56 
let formatter = NSNumberFormatter() 
formatter.locale = NSLocale.currentLocale() 
// or 
// f.locale = NSLocale(localeIdentifier: "it_IT") 
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

let formattedAmountSting = formatter.stringFromNumber(amount) 
1
NSNumberFormatter * fmt; 
NSNumber   * n; 

fmt = [ [ NSNumberFormatter alloc ] init ]; 
n = [ NSNumber numberWithFloat: 10 ]; 

[ fmt setFormatterBehavior: NSNumberFormatterBehavior10_4 ]; 
[ fmt setCurrencySymbol: @"$" ]; 
[ fmt setNumberStyle: NSNumberFormatterCurrencyStyle ]; 

NSLog(@"%@", [ fmt stringFromNumber: n ]; 

[ fmt release ] /* Thanx willcodejavaforfood... My mistake ;) */ 
+0

Salut merci pour ça .. Je vais vérifier tout de suite. Je dois mettre cela à l'intérieur - (IBAction) buttonPressed1: (id) expéditeur { } droite? Merci une tonne – user285096

+0

Je suis affichage sur UILabel – user285096

+0

et ne pas oublier de libérer le formateur :) – willcodejavaforfood

4

Ceci est un exemple de une situation où les catégories en Objective-C brille.

La solution la plus propre consiste à créer une catégorie pour NSNumber. .h:

@interface NSNumber (Formatter) 

- (NSString *)currencyStringValue; 

@end 

.m:

@implementation NSNumber (Formatter) 

- (NSString *)currencyStringValue 
{ 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    formatter.locale = [NSLocale currentLocale]; 
    formatter.numberStyle = NSNumberFormatterCurrencyStyle; 

    return [formatter stringFromNumber:self]; 
} 

@end 

Dans votre code, vous auriez à #import "NSNumber + Formatter.h" et il suffit de faire ceci:

- (IBAction)buttonPressed1:(id)sender 
{ 
    double total = [Amount1.text doubleValue] + [Amount2.text doubleValue]; 
    NSNumber *totalNumber = [NSNumber numberWithDouble:total]; 
    SumCurrency.text = totalNumber.currencyStringValue; 
} 

Très clair et propre.

-1

L'utilisation de float ou double (arithmétique à virgule flottante) avec de l'argent est une très mauvaise idée car des erreurs de précision. Vous devez utiliser l'arithmétique à virgule fixe, alias NSDecimalNumber.

+0

Alors que c'est généralement vrai pour les systèmes de données, à des fins d'affichage de la méthode à virgule flottante parfaitement raisonnable si tout ce que vous voulez afficher un nombre. –

Questions connexes