【问题标题】:Formatting a number to show commas and/or dollar sign格式化数字以显示逗号和/或美元符号
【发布时间】:2011-03-23 13:58:50
【问题描述】:

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

这是我正在使用的代码:

IBOutlet UILabel *labelrev

float rev = (x + y)

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

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

我该怎么做?

【问题讨论】:

  • 欢迎来到 StackOverflow!您可能应该选择一个用户名(而不是 user668830)。
  • 太棒了!请记住通过选择正确的答案来鼓励其他人帮助您。

标签: objective-c formatting uilabel nsnumberformatter


【解决方案1】:

您绝对应该为此使用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];

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

【讨论】:

  • @PeterB - 很高兴听到它有效。长代码有什么问题,您是如何解决的?我不明白你在说什么。
  • 感谢 Moshe,它运行良好....我正在开发一个 iphone 应用程序,但屏幕上 $xxx,xxx.xx 格式的空间有限。所以我把代码中的货币格式行去掉了。我把 $ 放在 UI 上而不是 NSNumber 格式,现在我在 UILabel 上得到 xxx,xxx ,这在我的屏幕布局上看起来更好。
  • 莫舍你如何使用这个并省略小数点?所以它只打印整个数字 $xx,xxx..thanks
  • @Moshe,感谢您提供出色而详细的答案(不参考 Apples 文档...)。在为数字输出创建正确的格式时,我确实遇到了一些困难。一个问题。如何确保NSNumbers 的本地小数点分隔符作为UILabels 中的字符串?再次感谢!
  • @Moshe 不幸的是,从语言环境中获取分组分隔符不足以使其正确本地化。例如,在印度,十亿和千万的使用比数千和数百万更普遍,货币的格式应该像 ₹2,00,00,000 - 请注意分组大小不统一。这是 2 千万卢比,或美国式的 2000 万卢比。
【解决方案2】:

您需要使用支持货币的NSNumberFormatter

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

印刷品:$10,395,209.00

【讨论】:

    【解决方案3】:
    [formatterCurrency setMaximumFractionDigits:0]
    

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

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

    结果

    12,345 美元

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多