2011-12-06 9 views
0

私は$ 12,000,000の値を持つrealEstateWorthという文字列を持っています。 文字列のままにするには同じ文字列が必要ですが、上のような数字は1200万ドルまたは600万ドルで表示されます。要点は、数字の後ろに「百万」という言葉が必要なことです。文字列を別の種類の数値文字列に構文解析する

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

誰かがアイデアや提案をいただければ、大変感謝しています。

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

答えて

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を使用して検討することもできますが、それは非常に適切ではありません。

[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 
    } 
} 

しかし

:この時点で、あなたはおそらく、多分同じような何かを行うことができます。 警告実装者

+0

+1大きな説明は、特に文字列のローカリゼーション/国際化について言及しています。 – Sam

+0

ありがとうございました – Teddy13

1

最悪のシナリオでは、NSStringcategoryを実装して、必要な動作を実装できます。
categoryで行う方法では、NSNumberFormatterを使用してその文字列を数値に変換し、モジュロ演算を実行して、MillionやBillionなどが必要な場合に定義して文字列を戻すことができますミリオンやそれ以外の方法でモジュロを使用する必要があります。

NSString *humanReadable = [realEstateWorth myCustomMethodFromMyCategory]; 

そしてまた:あなたはこのようなあなたのNSStringの上でそのメソッドを呼び出すことができます方法

NSString are immutableです。新しい変数を変数に割り当てるまで、変数を変更することはできません。

1

この値をNSNumberまたはfloatとして保存することをおすすめします。

- (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; 
} 

注:あなたの入力は、文字列を維持する必要があなたの質問の状態を次に、あなたが好き、それを表示するには、NSStringのを生成するための方法を持つことができます。それはいいです。だからあなたは1.)最初に文字列から数を解析し、2.)それから数値から文字列に変換する。私はこのプロセスのステップ2を行う方法を示しました。