2009-08-24 7 views
1

qui ressemble à un bogue dans l'API:Pourquoi mon objet NSNumberFormatter imprime-t-il "2" pour l'entrée 1.0?

Quand mon entrée CGFloat est 0.0, je reçois ceci:

Input = 0.000000, Output = +0 

Quand mon entrée CGFloat est 1.0, je reçois ceci:

Input = 1.000000, Output = +2 

Évidemment ce n'est pas ce que je veux ;-)

Maintenant, voici comment je crée cet objet NSNumberFormatter:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setAlwaysShowsDecimalSeparator:NO]; 
    [formatter setAllowsFloats:YES]; 
    [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
    [formatter setMinimumFractionDigits:0]; 
    [formatter setPlusSign:@"+"]; 
    [formatter setMinusSign:@"-"]; 
    [formatter setPositivePrefix:@"+"]; 
    [formatter setNegativePrefix:@"-"]; 
    [formatter setRoundingMode:NSNumberFormatterRoundUp]; 

et voilà comment je laisse formater mon CGFloat de 1.0f:

CGFloat myValue = 1.0f;  
NSNumber *number = [NSNumber numberWithFloat:myValue]; 
NSLog(@"Input = %f, Output = %@", myValue, [self.inputValueFormatter stringFromNumber:number]); 

Peut-être le roundingMode le problème ici? Lequel dois-je spécifier? Ou y a-t-il une autre cause à ce comportement étrange?

Répondre

0

Ajout cela semble faire l'affaire pour moi, même si je ne sais pas pourquoi il le fait:

[formatter setRoundingIncrement: [NSNumber numberWithFloat: 1]]; 
+0

Je compris le mode d'arrondi était très mauvaise ici. Je ne fais juste pas le tour, et ça marche. Ai-je mentionné que le formatage des nombres est nul? –

+0

Je pensais que vous vouliez explicitement arrondir à la hausse, c'est-à-dire que 1.1 devenait 2.0. Si vous voulez arrondir à l'arrondi habituel (x.5 et au-dessus, les autres valeurs sont arrondies à la baisse), vous devriez utiliser NSNumberFormatterRoundHalfUp je pense. –