14

我想用逗号格式化我的 UILabel 或更好地使用美元符号和逗号(没有小数)。

这是我正在使用的代码:

IBOutlet UILabel *labelrev

float rev = (x + y)

labelrev.text = [[NSString alloc] initWithFormat:@%2.f",rev];

我得到 xxxxxxxxx 作为我想要得到 xxx,xxx,xxx 或 $xxx,xxx,xxx 的输出

我怎么做?

4

3 回答 3

44

你绝对应该使用NSNumberFormatter它。基本步骤是:

  1. 分配、初始化和配置您的数字格式化程序。
  2. 使用格式化程序从数字返回格式化字符串。(它需要一个 NSNumber,因此您需要将您的 double 或任何您拥有的原语转换为 NSNumber。)
  3. 清理。(你知道,内存管理。)

此代码设置数字格式化程序。我已经做了你想要的一切,除了货币位。您可以在文档中查找。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];
[formatter setGroupingSeparator:groupingSeparator];
[formatter setGroupingSize:3];
[formatter setAlwaysShowsDecimalSeparator:NO];
[formatter setUsesGroupingSeparator:YES];

接下来,您要设置您的号码并返回一个格式化的字符串。在您的情况下,我们在 NSNumber 中包装了一个 double。我是内联的,但你可以把它分成两个步骤:

NSString *formattedString = [formatter stringFromNumber:[NSNumber numberWithFloat:rev];

别忘了打扫卫生!

[formatter release];

关于本地化的快速说明:

NSLocale 类提供了一些关于用户语言环境的有用信息。在第一步中,请注意我如何使用 NSLocale 来获得本地化的分组分隔符:

NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];

(一些国家使用句号/句号,而其他国家使用逗号。)我认为也有一种方法可以获得本地化的货币符号,但我不是百分百确定,所以请查看文档。(这取决于你想做什么。)

于 2011-03-23T14:52:56.257 回答
13

您将需要使用NSNumberFormatter支持货币的。

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLog(@"%@", [currencyFormatter stringFromNumber:[NSNumber numberWithInt:10395209]]);
[currencyFormatter release];

印刷品:10,395,209.00 美元

于 2011-03-23T14:25:31.900 回答
2
[formatterCurrency setMaximumFractionDigits:0]

是在 NSNumberFormatterCurrencyStyle 格式化程序中转换小数位和小数点分隔符的唯一方法。

NSNumberFormatter *formatterCurrency;
formatterCurrency = [[NSNumberFormatter alloc] init];

formatterCurrency.numberStyle = NSNumberFormatterCurrencyStyle;
[formatterCurrency setMaximumFractionDigits:0];
[formatterCurrency stringFromNumber: @(12345.2324565)];

结果

12,345 美元

于 2013-02-14T18:42:48.157 回答