2011-12-20 36 views
4

文字列の最後の文字を見て、変換を行うために特定の関数に送信する内容に基づいて、これを一連の手順で実行できます。しかし、私はちょうど次のことをする簡単な方法があるかどうか疑問に思っています。特定の文字を整数に変換するC#文字列

たとえば、私は23.44Mまたは5.23Bのような文字列を持っています.MとBは明らかに "Million"または "Billion"を表しています。文字列を表す数値に変換したいだけです。これを行う最も効率的な方法が不明です。いくつかのアイデアを探しています。おかげ

+1

これを実装して、.NETには組み込み関数がありません。あなたが記述するアプローチは賢明に聞こえる。 – dtb

+1

文字列の最後の文字を読んで文字を削除してから実際に欲しいものを –

+0

自分で作成したSwitch/Caseステートメントとカスタムメソッドを使って簡単に処理できます – MethodMan

答えて

0
/// <summary> 
/// Gets the value. 
/// </summary> 
/// <param name="number">The number.</param> 
/// <returns></returns> 
public static decimal GetValue(string number) 
{ 
    char unit = number.Last(); 
    string num = number.Remove(number.Length - 1, 1); 

    decimal multiplier; 
    switch (unit) 
    { 
     case 'M': 
     case 'm': 
      multiplier = 1000000; break; 

     default: 
      multiplier = 1; break; 
    } 

    return decimal.Parse(num) * multiplier; 
} 
+0

すべての素晴らしい応答ありがとう。このメソッドはすぐここで素晴らしい! – Ron

+0

@Ronあなたが解決策の1つを受け入れるならばいいでしょう。 – Strillo

0

はあなたの最善の策は、おそらく正規表現(MSDN docs here)を使用します(これは正規表現の構文ではありません)[番号] [文字] のグループ、あなたは2つのグループを持つことができますされ、最初はあなたの番号、第二になります

double.TryParse()を最初に変換し、スイッチまたはifステートメントのセットを使用して、最終結果を得るために必要な掛け算を実行します。

6

辞書を作成し、(B、1,000,000,000)と(M、1,000,000)などのキー値のペアを設定します。文字を最後から取り出し、その文字の値を調べて、乗算します。

1

これらのラインに沿って何かが役立ちますか?

double num = Double.parse(inputStr.Remove(inputStr.Count-1)); 
char lastChar = inputStr.Last(); 
switch(lastChar) 
{ 
    case 'M': 
     num *= 1000000; 
     break; 
    case 'B': 
     num *= 1000000000; 
     break; 
} 

入力の形式が異なる場合は、違法なParse()に対して保護するなど、ロジックを追加する必要があります。あなたは、このような「xHKxxMxxBxxTxxQ」などの文字列定数接尾辞を、移入してMath.Pow(10によって基地を掛けることができ@Smelchによって解答にオタク系の代替として

0

、POSTFIXES.LastIndexOf(...)+ 1)

0

ではなく、switch文の乗算器に文字をマップのみ大文字を使用するために辞書を使用します。

public static decimal GetValue(string number) 
{ 
    return decimal.Parse(number.Remove(number.Length - 1, 1)) * _multipliers[number.Last().ToUpper()]; 
} 
関連する問題