2011-07-11 6 views
8

Quiero que los usuarios puedan ingresar valores superiores a 0 por una cantidad de dinero en mi aplicación. Entonces 0,0 o cualquier representación de cero será inaceptable, pero se aceptará 0,1, por ejemplo.Reemplazar coma con punto al obtener el valor flotante de NSString

Para ello, estaba planeando obtener el valor flotante de NSString y compararlo con 0.0, pero esto no funciona, ya que nuestros números decimales deben separarse con coma, siempre (debido a un requisito comercial). Si las comas eran puntos, entonces la comparación hace el trabajo.

¿Cuál es la forma más digna de reemplazar las comas con puntos en los textos de mi cantidad?

PD: El usuario está limitado a ingresar solo números y solo una coma, para la parte decimal. Y en realidad me preguntaba si esto es sthg que se podía hacer con formateadores número más o menos ...

Thx de antemano

Respuesta

19

Se podía utilizar stringByReplacingOccurrencesOfString

NSString *newString = [ammount stringByReplacingOccurrencesOfString:@"," withString:@"."]; 
+3

Esto no funcionará en algunos países: http://en.wikipedia.org/wiki/ Decimal_mark # Hindu.E2.80.93 Arab_numeral_system (Números arábigos orientales) – Daniel

4

Puede utilizar el NSString+JavaAPI categoría, y luego hacer:

NSString* newString = [myString replace: @"," withString: @"."]; 

Por supuesto, esto puede no ser útil si el usuario ingresa algo como 1,000,00.

+0

El usuario está limitado a ingresar solo números y una coma, añadiré esto a mi pregunta ahora :) – aslisabanci

+2

+0: Mientras esto funciona, instalando esta categoría para el La mera envoltura de 'stringByReplacingOccurrencesOfString: withString:' con un nombre de método más corto es más trabajo t has ganado, en mi humilde opinión. – DarkDust

+0

@DarkDust - Muy bien. Me encojo cada vez que tengo que escribir 'stringByReplacingOccurrencesOfString' solo para demostrar un simple reemplazo de cadena. Pero tiene razón, la categoría solo tiene sentido si va a realizar muchas operaciones de procesamiento de cadenas. – aroth

0

Apple recomienda utilizar un NSScanner. este es el código que utilizo:

NSScanner *scanner; 
NSLocale *local =[NSLocale currentLocale ]; 
[scanner setLocale:local]; 
float result; 
scanner = [NSScanner localizedScannerWithString:<YOUR NSString>]; 
[scanner scanFloat:&result]; 
+0

Espero que ese no sea el código que usa. No configuró 'scanner' en nada, y recuperar la configuración regional actual es superfluo, de todos modos, si está utilizando' localizedScannerWithString: '. También recomiendo usar 'double' en lugar de' flotar' para evitar perder precisión. –

+0

sí su derecho ... me perdí algo el día en que compartí este código;) gracias – Fjohn

2

Aquí hay una clara forma de utilizar NSScanner:

NSScanner *scanner = [NSScanner localizedScannerWithString:theInputString]; 
    float result; 
    [scanner scanFloat:&result]; 
Cuestiones relacionadas