2010-12-10 48 views
0

我有这些数字格式:数字格式与NSNumberFormatter已经有小数和千个分隔符

100000,459 
100000459 
100.000 
100.000,59 
100.000.000,39 

数字变成为用户输入的值给它。对于每个增加的值,我需要使用NSNumberFormatter重新格式化数字。问题是这个数字已经有了。并且格式化程序似乎没有正确处理这些内容。它是这样出现的:

100 000,00 
100 000 459,00 
100,00 
100,00 
100,00 

例如,我想100000459变成100000459。

我现在使用的代码:

NSNumber *amount = [NSNumber numberWithInt:[string intValue]]; 
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"nb_NO"]; 
[currencyFormatter setLocale:locale]; 
NSString *commaString = [currencyFormatter stringForObjectValue:amount]; 

如何I格式已经格式化的数字?

回答

1

在最后一行中,您试图格式化字符串而不是数字。试试这个:

NSString *commaString = [currencyFormatter stringFromNumber:amount]; 

这是good reference

+0

感谢您的回复!不幸的是它对结果没有任何影响。仍然错误。 – doh 2010-12-10 11:28:32

0

我已经看过那个具体的参考。它不同于我的问题,因为在我的情况下,格式化时可能已经有小数。

0

NSNumberFormatter格式a 数字为一个字符串表示形式,它需要正确的数字表示形式才能够按预期格式化。通过你的代码示例的外观,你提供了一个整数值的格式化程序,这就是为什么你得到你所得到的输出。用string = @"100000,459"[string intValue]给你100000。这就是格式化程序的输出为100 000,00的原因。

你需要做的是首先将字符串转换为双重表示。这可以通过使用NSScanner来实现。您只需确保您扫描正确的语言环境中的数字,以便正确检测到千分隔符。

NSScanner *scanner = [NSScanner scannerWithString:@"100000,459"]; 
[scanner setLocale:locale]; 
double val; 
[scanner scanDouble:&val]; 
NSNumber *amount = [NSNumber numberWithDouble:val]; 

如何妥善处理千个分隔符,我不知道:你的第一个字符串可以通过转换为双。

相关问题