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