2010-10-26 4 views
3

Je possède ce bloc de code exécuté lorsque vous appuyez sur un numéro:Quel est le problème avec ce format de chaîne (comportement différent sur le simulateur et l'appareil)?

NSString *currentValue = [@"" stringByAppendingFormat:@"%.02f", [[[[[textField text] stringByReplacingOccurrencesOfString:@"." withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""] doubleValue]/100.0f]; 
      //I am using this to obtain always a number with 2 decimals. 

    NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
    [f setNumberStyle:NSNumberFormatterDecimalStyle]; 
    [f setMinimumFractionDigits:2]; 
    [f setMaximumFractionDigits:2]; 
    [f setGroupingSeparator:@" "]; 

    NSNumber *currentNumberValue = [f numberFromString:currentValue]; 
    NSLog(@"1: %@", currentValue); 
    NSLog(@"2: %@", [currentNumberValue stringValue]); 

Maintenant, si je lance ceci dans le simulateur et appuyez sur 3 j'obtenir les résultats suivants:

1: 0.03 
2: 0.03 

Si je l'exécute sur l'appareil je:

1: 0.03 
2: 0 

donc, fondamentalement, sur l'appareil le numéro est 0. formated
Ce que j'ai pas non plus glacé est que sur le simulateur je reçois '. 'comme séparateur décimal et sur l'appareil, j'ai' , '.

Et pour cette raison, il ne va jamais plus loin. Tout nombre que je presse il reste encore 0.

Ce qui semble être le problème?

+0

Quels sont vos paramètres internationaux/régionaux sur l'appareil par rapport au simulateur? – Anna

Répondre

2

Votre appareil est apparemment réglé sur un lieu européen (ou ailleurs) qui utilise , comme séparateur décimal. Essayez d'ajouter cette ligne après la ligne où vous alloc et init votre formatter numéro:

[f setDecimalSeparator:@"."]; 

Ou utilisez la méthode setLocale (ou modifier les paramètres régionaux de votre appareil est réglé sur).

+0

Merci. Ça a marché. Sur l'appareil j'avais une virgule (,) comme séparateur et de cette façon (avec setDecimalSeparator) c'est ok. – CristiC

+0

Merci * vous * - c'était ma première réponse iPhone. :) – MusiGenesis

+0

J'étais sur le point de m'en féliciter quand j'ai remarqué que tu avais déjà une simple réputation de 28.3k;) Félicitations quand même! –

0

Essayez comme ceci:

NSString *currentValue = [textField text]; 
float currentFloat = [currentValue floatValue]; 
NSLog(@"%.2f",currentFloat); //string representation of floatValue 
NSLog(@"%@",currentValue); //string currentValue