Iphone 为什么我的NSNumberFormatter对象打印“;2“;输入1.0?

Iphone 为什么我的NSNumberFormatter对象打印“;2“;输入1.0?,iphone,objective-c,cocoa-touch,uikit,number-formatting,Iphone,Objective C,Cocoa Touch,Uikit,Number Formatting,这看起来像API中的一个bug: 当我的输入CGFloat为0.0时,我得到: Input = 0.000000, Output = +0 Input = 1.000000, Output = +2 当我的输入CGFloat为1.0时,我得到: Input = 0.000000, Output = +0 Input = 1.000000, Output = +2 显然这不是我想要的;-) 下面是如何创建NSNumberFormatter对象: NSNumberFormatter

这看起来像API中的一个bug:

当我的输入CGFloat为0.0时,我得到:

Input = 0.000000, Output = +0
Input = 1.000000, Output = +2
当我的输入CGFloat为1.0时,我得到:

Input = 0.000000, Output = +0
Input = 1.000000, Output = +2
显然这不是我想要的;-)

下面是如何创建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];
这就是我让它格式化我的CGFloat 1.0f的方式:

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

这里的问题可能是圆形模式吗?我应该指定哪一个?或者这种奇怪的行为还有其他原因吗?

添加这一点似乎对我有好处,尽管我不知道为什么会这样:

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

我发现这里的取整模式非常糟糕。我只是不绕圈子,它是有效的。我有没有提到数字格式很糟糕?我以为你明确地想把它四舍五入,即1.1变成2.0。如果您想要通常的舍入(x.5及以上是向上舍入的,其他值是向下舍入的),我认为您应该使用NSNumberFormatterRoundHalfUp。