0

我有这些数字格式:

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

例如,我希望 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];

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

4

3 回答 3

1

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

NSString *commaString = [currencyFormatter stringFromNumber:amount];

这是一个很好的参考

于 2010-12-10T11:24:55.967 回答
0

NSNumberFormatter将数字格式化为字符串表示形式,并且它需要正确的数字表示形式才能按预期格式化。通过您的代码示例的外观,您为格式化程序提供了一个整数值,这就是您获得输出的原因。用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];

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

于 2010-12-10T15:20:15.407 回答
0

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

于 2010-12-10T11:34:32.113 回答