0

我有一个名为 realEstateWorth 的字符串,其价值为 12,000,000 美元。我需要这个相同的字符串来保持字符串,但任何数字(例如上面的那个)都显示为 $1200 万或 $600 万。关键是它需要在数字后面加上“百万”字样。

我知道有 nsNumberFormatter 可以将字符串转换为数字,反之亦然,但它可以满足我的需要吗?

如果有人有任何想法或建议,将不胜感激。

谢谢!

4

3 回答 3

5

所以在我看来,你有两个问题:

  1. 你有一个实际上是数字的字符串表示
  2. 您(可能)有一个要格式化为字符串的数字

所以,问题#1:

要将字符串转换为数字,请使用NSNumberFormatter. 你有一个非常简单的案例:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *n = [f numberFromString:@"$12,000,000"];
// n is 12000000

那很简单!现在问题#2:

这比较棘手,因为您需要混合拼写样式。您可以考虑NSNumberFormatter再次使用 an ,但这并不完全正确:

[f setNumberStyle:NSNumberFormatterSpellOutStyle];
NSString *s = [f stringFromNumber:n];
// s is "twelve million"

所以,我们更接近了。此时,您也许可以执行以下操作:

NSInteger numberOfMillions = [n integerValue] / 1000000;
if (numberOfMillions > 0) {
  NSNumber *millions = [NSNumber numberWithInteger:numberOfMillions];
  NSString *numberOfMillionsString = [f stringFromNumber:millions]; // "twelve"

  [f setNumberStyle:NSNumberFormatterCurrencyStyle];
  NSString *formattedMillions = [f stringFromNumber:millions]; // "$12.00"

  if ([s hasPrefix:numberOfMillionsString]) {
    // replace "twelve" with "$12.00"
    s = [s stringByReplacingCharactersInRange:NSMakeRange(0, [numberOfMillionsString length]) withString:formattedMillions];

    // if this all works, s should be "$12.00 million"
    // you can use the -setMaximumFractionDigits: method on NSNumberFormatter to fiddle with the ".00" bit
  }
}

然而

我不知道这在英语以外的任何地方都能奏效。 警告执行者

于 2011-12-06T18:55:51.703 回答
1

在最坏的情况下,您可以实现一个categoryonNSString来实现您想要的行为。
在您将执行的方法中,category您可以使用 NSNumberFormatter 将该字符串带入一个数字,并通过执行一些模运算,您可以定义是否需要单词 Million 或 Billion 等,然后用模数放回字符串百万或您需要的其他方式。

这样你就可以像这样在你的 NSString 上调用该方法:

NSString *humanReadable = [realEstateWorth myCustomMethodFromMyCategory];

并且。 NSString are immutable,所以你不能改变它,除非你给你的变量分配一个新的。

于 2011-12-06T18:22:27.193 回答
1

我建议将此值存储为 NSNumber 或浮点数。然后你可以有一个方法来生成一个 NSString 来显示它:

- (NSString*)numberToCurrencyString:(float)num
{
   NSString *postfix = @"";
   if (num > 1000000000)
   {
      num = num / 1000000000;
      postfix = @" Billion";
   }
   else if (num > 1000000)
   {
      num = num / 1000000;
      postfix = @" Million";
   }

   NSString *currencyString = [NSString stringWithFormat:@"%.0f%@", num, postfix];
   return currencyString;
}

注意: 您的问题表明您的输入需要保留为字符串。没关系。因此,您需要 1.) 首先从字符串中解析出数字,然后 2.) 然后将其从数字重新转换为字符串。我已经展示了如何执行此过程的第 2 步。

于 2011-12-06T18:44:23.313 回答