使用已包含小数和千位分隔符的NSNumberFormatter格式化数字

时间:2010-12-10 11:11:41

标签: iphone currency 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

E.g。我希望100000,459成为100 000,459。

我现在使用的代码:

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

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

3 个答案:

答案 0 :(得分:1)

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

NSString *commaString = [currencyFormatter stringFromNumber:amount];

这是good reference

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

如何正确处理我不知道的千位分隔符。