ios objective-c decimal separator nsnumberformatter

ios - NSNumberFormatter con separador de coma decimal



objective-c separator (5)

Así que la pregunta es válida: la estoy respondiendo yo mismo :)

Tengo un valor decimal leído de sqlite (por ejemplo, 12000 o 12000.54) transformado directamente en NSString. Tengo que usar un separador diferente en algún punto de mi código.

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setGroupingSeparator:@""]; [formatter setDecimalSeparator:@"."]; // Decimal values read from any db are always written with no grouping separator and a comma for decimal. NSNumber *numberFromString = [formatter numberFromString:@"12000.54"]]; [formatter setGroupingSeparator:@" "]; // Whatever you want here [formatter setDecimalSeparator:@","]; // Whatever you want here NSString *finalValue = [formatter stringFromNumber:numberFromString]; NSLog(@"%@",finalValue); // Print 12 000,54

Problema resuelto.

Intenté convertir una NSString como "12000.54" en "12.000.54". Escribí una instancia de NSNumberFormatter.

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setGroupingSeparator:@"."]; [formatter setDecimalSeparator:@","];

Pero cuando me registro esto:

NSLog(@"%@",[formatter stringFromNumber:[formatter numberFromString:value]]);

Imprime el valor nulo. Si cambio mi coma con un punto está funcionando correctamente. Solo me gustaría poder poner lo que quiero para mi campo de separadores (coma, punto, barra diagonal, etc.) y tengo diferentes salidas: 12 / 000,54 12.000.54 12,000,54 por ejemplo.

¿Sabes cómo puedo manejar esto?


La solución más simple que encontré recientemente es:

NSString *localizedString = [NSString localizedStringWithFormat:@"%@", @1234567];

También funciona con ints:

NSString *localizedString = [NSString localizedStringWithFormat:@"%d", 1234567];

Verificado en el patio de Xcode 6. Pero los doctores dicen que esta función siempre ha existido.


Para el uso de la moneda ...

let numberFormatter = NumberFormatter() // Produces symbol (i.e. "$ " for en_US_POSIX) and decimal formatting numberFormatter.numberStyle = .currency // Produces commas; i.e. "1,234" numberFormatter.usesGroupingSeparator = true numberFormatter.groupingSize = 3

Ejemplo de uso:

let value: Double = 12345.6789 numberFormatter.string(from: value as NSNumber)

rendimientos ...

"$ 12,345.68"

como uno esperaría


Recomendaría no codificar el separador para garantizar el comportamiento correcto del separador en función de la configuración regional del iPhone. La forma más fácil de hacerlo es:

utilizando object-c

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init]; numberFormatter.locale = [NSLocale currentLocale];// this ensures the right separator behavior numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; numberFormatter.usesGroupingSeparator = YES; // example for writing the number object into a label cell.finalValueLabel.text = [NSString StringWithFormat:@"%@", [numberFormatter stringForObjectValue:numberFromString]]; // your var name is not well chosen

utilizando SWIFT 3

let formatter = NumberFormatter() formatter.locale = NSLocale.current // this ensures the right separator behavior formatter.numberStyle = NumberFormatter.Style.decimal formatter.usesGroupingSeparator = true // example for writing the number object into a label // your variable "numberFromString" needs to be a NSNumber object finalValueLabel.text = formatter.string(from: numberFromString)! // your var name is not well chosen

y no usaría el nombre var "numberFromString" porque es un método NSNumberFormatter . ¡Buena suerte!


NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; numberFormatter.usesGroupingSeparator = YES; [numberFormatter setMaximumFractionDigits:2]; [numberFormatter setMinimumFractionDigits:2]; NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.00];`

Esto solucionará su problema de redondeo si se trata de puntos decimales.