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.