web-dev-qa-db-ja.com

conversionTypeが10進数で入力が「40.00」の場合のConvert.ChangeType()の使用方法

つまり、これを変換したい:

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

結果は10進数値「4000」

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

クリスよろしく

26
masterchris_99

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

一般に、カルチャに不変の変換を実行する場合、 methodIFormatProvider引数として CultureInfo.InvariantCulture を指定するのが最善です。

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

変換は、ピリオドを小数点の代わりに桁区切り記号として使用するカルチャを使用して行われる可能性があります。

値を変換するときにカルチャを指定します。

Convert.ToDecimal(a, CultureInfo.InvariantCulture)
3
Guffa

次のコード

 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);
2
Adrian Zanescu