2009-06-18 8 views
8

Quiero cambiar mi NSNumberformatter de mostrar números negativos con paréntesis a su alrededor para poner el signo menos al frente (o lo que sea el estándar localizado).Cambia el formato negativo de NSNumberFormatter de (xxx.xx) a -xxx.xx

yo supongo que podría hacer esto con setNegativeFormat:

pero la lectura oh documentos tan exhaustivos de Apple me quedo rascándome la cabeza:


setNegativeFormat:

establece el formato el receptor usa para mostrar valores negativos.

- (void)setNegativeFormat:(NSString *)aFormat 

Parámetros AFormatear Una cadena que especifica el formato para los valores negativos.

Disponibilidad Disponible en iPhone OS 2.0 y posterior.

Véase también - negativeFormat

declarados en NSNumberFormatter.h


¿cuáles son mis opciones para AFormatear?!? Vamos Doc Writers, ¿un enlace aquí te mataría?

de edición: para lo que vale aquí está la declaración:

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

Es importante para mí para conservar el símbolo de moneda localizada & cifras decimales sean las que sean. Entonces [currencyFormatter setNegativeFormat: @ "- #, ## 0.00"] probablemente no funcionará ya que falta la moneda y no se pueden suponer 2 decimales para todas las monedas.

Respuesta

17

Si se echa un vistazo a la sección de "Cadenas de formato" en el Data Formatting Programming Guide For Cocoa:

La cadena de formato utiliza los modelos de formato de la Unicode Technical Standard #35 (esta referencia es a la versión tr35-6; los formateadores para Mac OS X v10.4 usan la versión tr35-4).

Editar:

Si desea establecer una cadena de formato basado en monedas, se puede utilizar el carácter ¤, por ejemplo:

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

Esto añadirá el símbolo de moneda de la localización actual en lugar del carácter ¤.

Por lo tanto, aplicando el mismo concepto a la cadena de formato negativo:

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

Esto también se aplicará el símbolo de moneda en lugar del ¤ para la localización actual.

+0

así que cuando agrego: "[currencyFormatter setNegativeFormat: @" - #, ## 0.00 "];" después de configurar el formateador en NSNumberFormatterCurrencyStyle, pierdo el símbolo de moneda. Podría forzar con un "$" pero eso frustra el propósito del estilo de moneda en otros entornos nacionales. ¿No hay alguna manera de decir algo como setNegativeFormat: MinusSignFormat o algo así?!? – Meltemi

+0

Antes de poder editar, pude encontrar ese carácter "¤" gracias a su enlace. ¡Así que te daré la estrella de oro! ¡Gracias! – Meltemi

+10

Tenga en cuenta que esto arruina cualquier formato de moneda localizada. Terminé usando el formato positivo y agregué el signo menos a él como sigue: [formatter setNegativeFormat: [@ "-" stringByAppendingString: [self.numberFormatter positiveFormat]]]; –

1

En este caso, está buscando un formato NSString. Look here for format string details.

Si desea que el negativo de 12,345.67 para mostrar como -12,345.67, entonces creo que el valor NSString correcta es @"-#,##0.00"

También tomó nota de la siguiente frase en el documento enlazado arriba:

Si Don 'especifique un formato para valores negativos, se utiliza el formato especificado para valores positivos, precedido de por un signo menos (-).

EDIT:
Actualización para 10.4 y después: Here is a PDF describing behavior in 10.4 and after
Y, como vinculados a partir de ese documento, aquí está el data on the required format for 10.4 and after.
A partir de este documento, parece que la cadena correcta puede ser: @"-#,##0.##"

+0

Creo que enlace es para el viejo estilo NSNumberFormatter (10,0 - 10.3). Estoy usando la versión 10.4+ (Cocoa-Touch). Pensé que el estilo "- #, ## 0.00" fue abandonado debido a problemas de localización?!? – Meltemi

+0

"Si no especifica un formato para valores negativos, se utiliza el formato especificado para valores positivos, precedido por un signo menos (-)". Puede ser cierto para 10.0-10.3 pero obtengo paréntesis "(...)" – Meltemi

+0

respuesta editada con 10.4 información. – Demi

1

bien, así que la respuesta que obtuve de trabajo es:

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

la clave es esta whatzit? carácter "¤". No tengo idea de cómo se llama? ¿nadie? pero representa la moneda localizada en estas cadenas de formato ...

+0

No estoy seguro de que tenga un nombre, pero es el símbolo Unicode 00A4 –

+0

Sus nombres, de acuerdo con UnicodeChecker, son "signo de moneda" y "otro símbolo de moneda". –

1

Todas las respuestas dadas asumen que la moneda tiene dos decimales y también usa comas como separadores de miles. Es obvio que hay una serie de monedas que no se ajustan a esta norma, http://en.wikipedia.org/wiki/Decimal_mark, así que utilizan la técnica siguiente

NSString * formattedBalance = [currencyFormatter stringFromNumber:balance]; 
    if([formattedBalance rangeOfString:@"("].location != NSNotFound) { 
     formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]]; 
    } 
Cuestiones relacionadas