Tengo algunas cadenas que son específicas de la configuración regional (p. Ej., 0.01 o 0.01). Quiero convertir esta cadena a un NSDecimalNumber. Desde el examples I've seen thus far on the interwebs, esto se logra mediante el uso de un NSNumberFormatter a la:Obteniendo un NSDecimalNumber desde una cadena local específica?
NSString *s = @"0.07";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setGeneratesDecimalNumbers:YES];
NSDecimalNumber *decimalNumber = [formatter numberFromString:s];
NSLog([decimalNumber stringValue]); // prints 0.07000000000000001
estoy usando el modo de 10,4 (además de ser recomendado por la documentación, también es el único modo disponible en el iPhone), pero indicando al formateador que quiero generar números decimales. Tenga en cuenta que he simplificado mi ejemplo (en realidad estoy tratando con cadenas de moneda). Sin embargo, obviamente estoy haciendo algo mal para que devuelva un valor que ilustre la imprecisión de los números de coma flotante.
¿Cuál es el método correcto para convertir un string de número específico de locale a un NSDecimalNumber?
Editar: Tenga en cuenta que mi ejemplo es por simplicidad. La pregunta que hago también debe relacionarse con cuándo necesita tomar una cadena monetaria específica de la configuración regional y convertirla a un NSDecimalNumber. Además, esto se puede expandir a una cadena de porcentaje específico de la configuración regional y convertirlo a NSDecimalNumber.
Como nota al margen, debe convertir el número del formateador en un puntero a NSDecimalNumber. Es decir. NSDecimalNumber * decimalNumber = (NSDecimalNumber *) [formatter numberFromString: s]; –