2012-03-08 12 views
13

Puedo convertir un NSNumber en particular en moneda usando NSNUmberFormatter. Su símbolo showign $, números separados por "," etc.
Pero no quiero mostrar los centavos.
Por ejemplo su visualización $ 537,335.32
sólo quiero mostrar $ 536,335 mil
estoy escribiendo el siguiente código:iOS - Mostrando moneda sin centavos usando NSNumberFormatter

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

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

Cómo debería crear NSNumberFormatter o hacer algo para que el resultado no tendrá "decimales "

Respuesta

0

Antes de añadir el número a la formateador, cambiarlo a int para evitar los decimales, algo como esto:

float myValue = 543.32; 

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

¡Deshará de la parte decimal!

+0

Gracias, esta es una buena solución si estoy creando el NSNumber. Pero el problema es que obtendré los datos del servidor que no puedo cambiar. Solo durante la visualización, quiero truncar los centavos. – Satyam

+1

No necesita cambiar su valor original, simplemente copie el número en una variable int, no veo el problema –

33

Utilice los maximumFractionDigits ajuste:

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

se puede ajustar el valor según corresponda. Usar 2 limitará el resultado a dos dígitos, para esta pregunta un valor de 0 debería hacerlo.

+1

Como complemento a esta respuesta, agregando [currencyFormatter setMinimumFractionDigits: 0]; obtendrá los números que redondean los decimales cuando es igual a cero. En mi caso, quiero mostrar $ 126k, o $ 1.25M. Esto me permite obtener eso. –

0

Cuando vas a mostrar que acaba de hacer esto

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

Esto sólo funciona si la variable mynumberwithcents es o bien un flotador o una doble ...

-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

Aquí hay una solución en 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 

Ajuste del maximumFractionDigits-0 no mostrará ninguna valores fraccionarios o decimales.

Cuestiones relacionadas