2013-02-28 38 views
1

我们的质量保证团队检测到缺陷。当他们在货币字段中输入0.0950,095时,NSNumberFormatter将内容转换为95NSNumberFormatter转换删除小数值小数

这是代码,我们使用:

+ (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

谢谢!

+0

你使用[格式化numberFromString:theSource]前检查theSource的字符串值?你如何输出NSNumber?尝试在家里,它的作品。 – 2013-02-28 15:52:48

+0

如果我申请的NSNumber的doubleValue或floatValue结果是95.如果我调试的NSNumber描述很长(95) – 2013-02-28 16:06:07

回答

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]); 

//输出得到数0.095 - 0.095000 0.095000