2014-02-25 16 views
2

我用下面的代码格式化字符串的数字格式化NSDecimalNumber当松动分数零:加入千个点与NSNumberFormatter

NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:@"0.000"]; 
NSLog(@"decimalNumber = %@",decimalNumber); 

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setGroupingSeparator:@"."]; 
[numberFormatter setGroupingSize:3]; 
[numberFormatter setUsesGroupingSeparator:YES]; 
[numberFormatter setDecimalSeparator:@","]; 
[numberFormatter setMaximumFractionDigits:9]; 

NSString *finalString = [numberFormatter stringFromNumber:decimalNumber]; 
NSLog(@"finalString = %@",finalString); 

如果我想格式化@“0.000”字符串(这不是必须是3个零,可以有更少或更多),我有以下的日志输出:

decimalNumber = 0 
finalString = 0 

,但我想要的是保持分数为零,即在这种情况下,我的字符串必须保持不变。我看到这些零点在创建NSDecimalNumber时丢失了,我需要另一种方法。可以做什么?

回答

3

补充一点:

[numberFormatter setMinimumFractionDigits:3]; 
+0

和'[NumberFormatter类setNumberStyle:NSNumberFormatterDecimalStyle]' – Desdenova

+0

当有后点正好三个零它是有用的,只有在情况下,但它只是一个例子。当我举例时,它不起作用:@“0.0000” –

+0

是的,“3”只是一个例子。你可以用一个不同的数字来替换它,或者用一个变量替换它,如下所示:'[numberFormatter setMinimumFractionDigits:significantDigitsAfterDecimalPoint];'但格式化程序不能告诉你可能需要多少个零,所以你需要跟踪并告诉它。 – Caleb

1

尝试这种方式

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"US"]; 

NSNumberFormatter *formatterN = [[NSNumberFormatter alloc] init]; 
[formatterN setMaximumFractionDigits:3]; 
[formatterN setMinimumFractionDigits:3]; 
[formatterN setLocale:usLocale]; 

[formatterN stringFromNumber:decimalNumber]; 
2

迦勒的回答帮我解决问题,我想和大家分享我如何完全固定它:

1 。首先我加了这个方法:

- (uint) fractionalNumberCountFromString:(NSString*) numberString 
{ 
    NSRange fractionalPointRange = [numberString rangeOfString:@"."]; 
    if (fractionalPointRange.location == NSNotFound) 
    { 
     return 0; 
    } 
    return numberString.length-fractionalPointRange.location-1; 
} 

2.Second我加了这条线在那里我设置NSNumberFormatter

[numberFormatter setMinimumFractionDigits:[self fractionalNumberCountFromString:@"0.000"]]; 
+0

不错的电影,不错的解决方案。 – taber