格式化数字以显示逗号和/或美元符号

Pet*_*r B 14 formatting objective-c uilabel nsnumberformatter

我想用逗号或更好的格式化我的UILabel,带有美元符号和逗号(没有小数).

这是我正在使用的代码:

IBOutlet UILabel *labelrev

float rev = (x + y)

labelrev.text = [[NSString alloc] initWithFormat:@%2.f",rev];
Run Code Online (Sandbox Code Playgroud)

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

我怎么做?

Mos*_*she 45

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

  1. 分配,初始化和配置数字格式化程序.
  2. 使用格式化程序从数字返回格式化字符串.(它需要一个NSNumber,所以你需要将你的双重或任何原语转换为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];
Run Code Online (Sandbox Code Playgroud)

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

NSString *formattedString = [formatter stringFromNumber:[NSNumber numberWithFloat:rev];
Run Code Online (Sandbox Code Playgroud)

别忘了清理!

[formatter release];
Run Code Online (Sandbox Code Playgroud)

关于本地化的快速说明:

NSLocale类提供有关用户区域设置的一些有用信息.在第一步中,请注意我如何使用NSLocale获取本地化的分组分隔符:

NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];
Run Code Online (Sandbox Code Playgroud)

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


Joe*_*Joe 13

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

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

印刷品:10,395,209.00美元