我们的质量保证团队检测到缺陷。当他们在货币字段中写下0.095
或0,095
时,NSNumberFormatter
会将内容转换为95
。
这是我们正在使用的代码:
+ (NSNumber *) getNumberWithDecimalFromString:(NSString*) theSource
{
if ([TSCommons isEmpty:theSource])
return [[NSNumber alloc] initWithInt:0];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
if ([theSource rangeOfString:@","].location != NSNotFound) {
[formatter setDecimalSeparator:@","];
[formatter setCurrencyDecimalSeparator:@"."];
} else if ([theSource rangeOfString:@"."].location != NSNotFound) {
[formatter setDecimalSeparator:@"."];
[formatter setCurrencyDecimalSeparator:@"."];
}
NSNumber *tmp = [formatter numberFromString:theSource];
[formatter release];
return [tmp retain];
}
区域设置为es_ES
有关这种意外行为的任何想法吗?
要介绍有关此问题的更多信息,因为在最后一次XCode更新后再次回来我准备了一个测试
- (void) testNumberFormatter
{
NSLog(@"%f",[[TSCommons getNumberWithDecimalFromString:@"41,1"] doubleValue]);
NSLog(@"%f",[[TSCommons getNumberWithDecimalFromString:@"41,12342"] doubleValue]);
NSLog(@"%f",[[TSCommons getNumberWithDecimalFromString:@"41,12"] floatValue]);
NSLog(@"%f",[[TSCommons getNumberWithDecimalFromString:@"41,123"] floatValue]);
NSLog(@"%f",[[TSCommons getNumberWithDecimalFromString:@"41,1234"] floatValue]);
NSLog(@"%f",[[TSCommons getNumberWithDecimalFromString:@"41,1234234"] doubleValue]);
}
控制台上的结果如下:
41.100000
41.123420
41.119999
41123.000000
41.123402
41.123423
谢谢!
答案 0 :(得分:0)
NSString* theSource = @"0.095";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
if ([theSource rangeOfString:@","].location != NSNotFound) {
[formatter setDecimalSeparator:@","];
[formatter setCurrencyDecimalSeparator:@"."];
} else if ([theSource rangeOfString:@"."].location != NSNotFound) {
[formatter setDecimalSeparator:@"."];
[formatter setCurrencyDecimalSeparator:@"."];
}
NSNumber *tmp = [formatter numberFromString:theSource];
NSLog(@"get Number %@ - %lf %lf", tmp, [theSource doubleValue], [tmp floatValue]);
// output get Number 0.095 - 0.095000 0.095000