【问题标题】:What is the best way to format string representation of number in iOS在iOS中格式化数字字符串表示的最佳方法是什么
【发布时间】:2013-06-22 15:16:55
【问题描述】:

在我正在编写的 iOS 应用程序中,我收到一个带有价格字符串表示的 json 对象,如下所示:

{
  "price":"20000"
}

为了便于阅读,我想用逗号对其进行格式化,我已经找到了一种方法,但我觉得它是一个疯狂的笨拙(我可能只是没有在 google 中使用正确的术语)。

 NSNumberFormatter *formatter = [NSNumberFormatter new];
 [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
 NSString price = [NSString stringWithFormat:@"$%@", [formatter stringFromNumber:[NSNumber numberWithInteger:[price intValue]]]];

对我来说,要获得正确的格式,我必须这样做似乎过于复杂

  1. 将 NSString 转换为 int。
  2. 将 int 转换为 NSNumber。
  3. 将 NSNumber 转换为 NSString。
  4. 创建一个具有正确格式的新字符串(@david/@wain 向我展示了如何删除这一步!)

【问题讨论】:

    标签: ios nsnumberformatter


    【解决方案1】:

    最好的货币是NSNumberFormatterCurrencyStyle

    NSNumberFormatter *formatter = [NSNumberFormatter new];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    NSNumber *price = @([priceTextFromJSON doubleValue]);
    NSString *priceText = [formatter stringFromNumber:price];
    

    【讨论】:

    • 由于原始价格是一个字符串,这会生成一个Incompatible pointer types sending 'NSString *__strong' to parameter of type 'NSNumber *'。不过,它确实消除了最后一步,我至少在其中添加了 $。
    • 如果您对该 JSON 有任何控制权,您应该将数字作为数字发送。另请注意,如果您打算用金钱进行任何计算,那么您应该始终NSDecimalNumbers的形式进行
    • 确保始终在用户区域设置中返回价格,否则将显示错误的货币符号。
    • 不幸的是,json 是按原样提供的。幸运的是没有计算,我只需要显示这些值。您建议在这种情况下使用 NSDecimalNumber 是因为价格,而不是出于任何其他原因,对吗?
    【解决方案2】:

    你有什么好。

    如果源价格不是整数,您可以使用[NSDecimalNumber decimalNumberWithString:price] 更好地处理源价格。

    您可以使用[formatter setCurrencySymbol:@"$"] 代替stringWithFormat 来处理符号。

    这些更改将使您的实现更加健壮和优雅。

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 2011-01-29
      • 1970-01-01
      • 2015-11-07
      • 2011-06-20
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多