2011-10-11 8 views
19

が、私はこれを変換したいときConvert.ChangeType()を使用する方法:conversionTypeが小数であり、入力が「40.00」は私が意味

string a = "40.00"; 
Convert.ChangeType(a, typeof(decimal)) 

結果は「4000」

の10進値です

問題は、変換呼び出しが非常に抽象的な汎用メソッドでxmlToObjectコンバーターにあることです。私は正しく変換するために異なる例外のプログラム的にたくさんのものを追加したくありません。

よろしくクリス

+4

"40,00"は正しく変換されますか? – Joe

+2

あなたはカルチャーマンを変更する必要があります。 – nawfal

答えて

33

小数点は、現在の文化の中でピリオド文字で表現されない場合があります。

文化不変の変換を実行するとき、一般的に、それはmethodからIFormatProvider引数としてCultureInfo.InvariantCultureを指定するのが最善です:

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture); 
3

変換が最も可能性が高い桁区切り記号としてピリオドを使用しています文化を使用して行われます小数点記号の代わりに。

あなたが値を変換する際の文化を指定します。

Convert.ToDecimal(a, CultureInfo.InvariantCulture) 
2

次のコード

string s = "40.00"; 
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal)); 

は、D = 40これは私のために正常に見えることができます。あなたの問題は何ですか?

編集: 使用している文化に問題があるようです。 変換のためにこれを行います:

string s = "40.00"; 
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture); 
+3

問題は、いつものように、 '.'は必ずしも小数点区切りではないということです。 –

+0

それを指摘するためのtx。私は私の応答を編集しました。 –

+1

@DavidHeffernanどのような不気味な文化がそうですか:/ – nawfal

関連する問題