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

时间:2011-03-23 13:58:51

标签: objective-c formatting uilabel nsnumberformatter

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

以下是我正在使用的代码:

IBOutlet UILabel *labelrev

float rev = (x + y)

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:45)

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

  1. 分配,初始化和配置您的号码格式化程序。
  2. 使用格式化程序从数字返回格式化字符串。 (它需要一个NSNumber,所以你需要将你的双重或任何原语转换为NSNumber。)
  3. 清理。 (你知道,内存管理。)
  4. 此代码设置数字格式化程序。除了货币位之外,我已经做了你想要的一切。你可以在文档中查看。

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

    (有些国家/地区使用全站/期间,而其他国家则使用逗号。)我认为还有一种方法可以获得本地化的货币符号,但我不是百分之百肯定的,所以检查文档。 (这取决于你想做什么。)

答案 1 :(得分:13)

您需要使用支持货币的NSNumberFormatter

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

打印: $ 10,395,209.00

答案 2 :(得分:2)

[formatterCurrency setMaximumFractionDigits:0]

只能截断NSNumberFormatterCurrencyStyle格式化程序中的十进制数字和小数点分隔符。

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

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

结果

12,345 $