0

$12,000,000の値を持つrealEstateWorthという文字列があります。文字列のままにするには、これと同じ文字列が必要ですが、任意の数値(上記のようなもの)を$12MILLIONまたは$600万として表示する必要があります。ポイントは、数字の後に「MILLION」という単語が続く必要があるということです。

文字列を数値に、またはその逆に変換できるnsNumberFormatterがあることは知っていますが、必要なことを実行できますか?

誰かが何かアイデアや提案があれば、それは大いにありがたいです。

ありがとうございました!

4

3 に答える 3

5

私が見たように、あなたには2つの問題があります:

  1. 実際には数値である何かの文字列表現があります
  2. あなたは(潜在的に)文字列としてフォーマットしたい数値を持っています

したがって、問題#1:

文字列を数値に変換するには、NSNumberFormatter. あなたはかなり単純なケースを持っています:

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

それは簡単でした!今問題#2:

混合スペルアウト スタイルが必要なため、これはよりトリッキーです。もう一度使用することを検討できますがNSNumberFormatter、それは正しくありません。

[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

この値をNSNumberまたはfloatとして保存することをお勧めします。次に、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 に答える
1

最悪のシナリオでは、必要な動作を実装するためcategoryに onNSStringを実装できます。NSNumberFormatter を使用してその文字列を数値に変換し、モジュロ演算を実行することで、ミリオン、またはビリオンなどの単語が必要かどうかを定義し、モジュロを使用して文字列を元に戻すことができる
という方法で行います。categoryミリオンまたはその他の方法で必要です。

そうすれば、次のように NSString でそのメソッドを呼び出すことができます。

NSString *humanReadable = [realEstateWorth myCustomMethodFromMyCategory];

そしてまた。 NSString are immutable、そのため、変数に新しいものを割り当てない限り、変更できません。

于 2011-12-06T18:22:27.193 に答える