2

NSNumberFormatterCurrencyStyle と負の最小値を持つ NSNumberFormatter の numberFromString で明らかなオフバイワンの問題が発生しています。以下のテストからわかるように、numberFromString は最低額を変換しようとすると nil を返しますが、最低額を 1 下回ると正しく返します。

否定的な文脈で「最小」が意味することを誤解していますか?それとも、これは numberFromString のバグですか?それとも?

ありがとう。

- (void)test {
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [numberFormatter setMinimum:[NSDecimalNumber decimalNumberWithMantissa:2142 exponent:-2 isNegative:YES]];
    [numberFormatter setMaximum:[NSDecimalNumber decimalNumberWithMantissa:100 exponent:0 isNegative:NO]];
    [numberFormatter setNegativeFormat:[@"-" stringByAppendingString:[numberFormatter positiveFormat]]];

    NSLog(@"[numberFormatter positiveFormat] is: %@", [numberFormatter positiveFormat]);
    NSLog(@"[numberFormatter negativeFormat] is: %@", [numberFormatter negativeFormat]);
    NSLog(@"[numberFormatter minimum] is: %@", [numberFormatter minimum]);
    NSLog(@"[numberFormatter maximum] is: %@", [numberFormatter maximum]);
    NSLog(@"[numberFormatter numberFromString:@\"-$21.43\"] is: %@", [numberFormatter numberFromString:@"-$21.43"]);
    NSLog(@"[numberFormatter numberFromString:@\"-$21.42\"] is: %@", [numberFormatter numberFromString:@"-$21.42"]);
    NSLog(@"[numberFormatter numberFromString:@\"-$21.41\"] is: %@", [numberFormatter numberFromString:@"-$21.41"]);
    NSLog(@"[numberFormatter numberFromString:@\"-$21.40\"] is: %@", [numberFormatter numberFromString:@"-$21.40"]);

}

コンソール出力:

2012-07-16 10:13:04.242 Am[21075:15203] [numberFormatter positiveFormat] is: ¤#,##0.00
2012-07-16 10:13:04.244 Am[21075:15203] [numberFormatter negativeFormat] is: -¤#,##0.00
2012-07-16 10:13:04.244 Am[21075:15203] [numberFormatter minimum] is: -21.42
2012-07-16 10:13:04.245 Am[21075:15203] [numberFormatter maximum] is: 100
2012-07-16 10:13:04.246 Am[21135:15203] [numberFormatter numberFromString:@"-$21.43"] is: (null)
2012-07-16 10:13:04.247 Am[21075:15203] [numberFormatter numberFromString:@"-$21.42"] is: (null)
2012-07-16 10:13:04.248 Am[21075:15203] [numberFormatter numberFromString:@"-$21.41"] is: -21.41
2012-07-16 10:13:04.248 Am[21135:15203] [numberFormatter numberFromString:@"-$21.40"] is: -21.4
4

0 に答える 0