2012-03-08 30 views
13

Sono in grado di convertire un determinato NSNumber in valuta utilizzando NSNUmberFormatter. Il suo simbolo $ simbolo, i numeri separati da "," ecc.
Ma io non voglio mostrare centesimi.
Per esempio la sua visualizzazione di $ 537,335.32
voglio solo visualizzare $ 536 mila trecentotrentacinque
sto scrivendo il seguente codice:iOS - Mostra valuta senza centesimi utilizzando NSNumberFormatter

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

NSDictionary* tempDict = [self.displayDict objectForKey:kConservative]; 
conservativeHP.text = [currencyFormatter stringFromNumber:[tempDict objectForKey:kHomePrice]]; 

Come devo creare NSNumberFormatter o fare qualcosa in modo che il risultato non avrà "decimali "

risposta

0

Prima di aggiungere il numero al formattatore, modificarlo a int per evitare i decimali, qualcosa di simile:

float myValue = 543.32; 

NSNumber myNumber = [NSNumber numberWithInt: (int)myValue)]; 

Eliminerai la parte decimale!

+0

Grazie, questa è una buona soluzione se sto creando NSNumber. Ma il problema è che otterrò i dati dal server che non posso cambiare. Solo durante la visualizzazione, voglio troncare i centesimi. – Satyam

+1

Non è necessario modificare il valore originale, basta copiare il numero in una variabile int, non vedo il problema –

33

Utilizzare i maximumFractionDigits impostazione:

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

È possibile regolare il valore di conseguenza. L'utilizzo di 2 limiterà il risultato a due cifre, per questa domanda il valore 0 dovrebbe farlo.

+1

Come una parte di questa risposta, aggiungendo [currencyFormatter setMinimumFractionDigits: 0]; otterrai numeri che arrotondano i decimali quando sono pari a zero. Nel mio caso, voglio mostrare $ 126k, o $ 1,25M. Questo mi permette di ottenere quello. –

0

Quando si va a visualizzarlo solo fare questo

Mylabel.text = @"%.2f", mynumberwithcents; 

Questo funziona solo se la variabile mynumberwithcents o è un float o un doppio ...

-1

Swift 3:

currencyFormatter.maximumFractionDigits = 0 
0
In case of using category: 

    .h 
     #import <Foundation/Foundation.h> 

     @interface NSString (Price) 

     + (NSString *)updateStringToPriceWithValue:(NSNumber *)value; 

     @end 
    .m 
     #import "NSString+Price.h" 
     @implementation NSString (Price) 

     + (NSString *)updateStringToPriceWithValue:(NSNumber *)value 
     { 
      NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
      [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

      NSInteger minimumFractionDigits = [formatter minimumFractionDigits]; 
      NSInteger maximumFractionDigits = [formatter maximumFractionDigits]; 

      NSString *formatted = [formatter stringFromNumber:value]; 
      NSLog(@"%@", formatted); 

      [formatter setMinimumFractionDigits:minimumFractionDigits]; 
      [formatter setMaximumFractionDigits:maximumFractionDigits]; 



      return formatted; 

     } 
1

Ecco la soluzione in swift 3

let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    //formatter.locale = NSLocale.current 
    formatter.currencySymbol = "" //In case you do not want any currency symbols 
    formatter.maximumFractionDigits = 0 

Impostazione del maximumFractionDigits-0 non mostrerà le cifre decimali o valori frazionari.

Problemi correlati