1
我们的质量保证团队检测到缺陷。当他们在货币字段中输入0.095
或0,095
时,NSNumberFormatter
将内容转换为95
。NSNumberFormatter转换删除小数值小数
这是代码,我们使用:
+ (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
这个意外的行为的任何想法?
引进更多的信息,关于这个问题,因为我准备了一个测试
- (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]);
}
控制台上的结果,最后的XCode更新后,重新回来是:
41.100000
41.123420
41.119999
41123.000000
41.123402
41.123423
谢谢!
你使用[格式化numberFromString:theSource]前检查theSource的字符串值?你如何输出NSNumber?尝试在家里,它的作品。 – 2013-02-28 15:52:48
如果我申请的NSNumber的doubleValue或floatValue结果是95.如果我调试的NSNumber描述很长(95) – 2013-02-28 16:06:07