2009-08-24 11 views
1

, der wie ein Fehler in der API aussieht:Warum gibt mein NSNumberFormatter-Objekt "2" für Eingabe 1.0 aus?

Wenn meine Eingabe CGFloat 0.0 ist, bekomme ich diese:

Input = 0.000000, Output = +0 

Wenn mein Eingang CGFloat 1.0 ist, bekomme ich diese:

Input = 1.000000, Output = +2 

Offensichtlich das ist nicht, was ich will ;-)

Jetzt ist hier, wie ich das NSNumberFormatter-Objekt erstellen:

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]; 

und das ist, wie ich es meine CGFloat von 1.0f formatieren lassen:

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

hier die roundingMode kann das Problem sein? Was soll ich angeben? Oder gibt es einen anderen Grund für dieses seltsame Verhalten?

Antwort

0

Addiert man diese scheint für mich, den Trick zu tun, obwohl ich nicht sicher bin, warum es funktioniert:

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

mir der Rundungsmodus heraus hier sehr schlecht war. Ich richte mich einfach nicht darum, und es funktioniert. Habe ich erwähnt, dass Zahlenformatierung saugt? –

+0

Ich dachte, du wolltest es explizit abrunden, d. H. 1.1 wird 2.0. Wenn Sie die übliche Rundung wünschen (x.5 und höher wird aufgerundet, andere Werte werden abgerundet), sollten Sie NSNumberFormatterRoundHalfUp verwenden, denke ich. –

Verwandte Themen