2

Convert.ToDecimal関数を使用してdoubleを10進数に変換しようとしています。問題は、どういうわけか.netが元のdouble変数のサイズに応じて10進数を省略することを選択することです。

次の例を見てください。

        double d = 2999247013.972682;
        decimal convDecimal = Convert.ToDecimal(d);
        decimal realDecimal = 2999247013.972682M;

        Console.WriteLine(d);
        Console.WriteLine(convDecimal);
        Console.WriteLine(realDecimal);

これにより、次の出力が生成されます。

2999247013,97268  // comments: (actual value 2999247013,972682)
2999247013,97268  // comments: (actual value 2999247013,97268)
2999247013,972682 // comments: (actual value 2999247013,972682)

('、'は現在のロケールの小数点です)

私が達成しようとしているのは、Convert.ToDecimal(d)を使用して、10進数の2999247013,972682を取得することです。

誰か考えはありますか?

4

2 に答える 2

3

これは、Decimal返される値が最大15桁の意味を持つことができるためです。MSDNから。

このメソッドによって返されるDecimal値には、最大15桁の有効数字が含まれます。値パラメーターに15を超える有効数字が含まれている場合は、最も近い値への丸めを使用して丸められます。次の例は、Convert.ToDecimal(Double)メソッドが最も近い値への丸めを使用して、有効数字15桁の10進値を返す方法を示しています。

したがって、有効数字が15を超える場合は丸められます。これは、double渡す値の有効数字が16であるため、この場合に発生します。

于 2012-10-22T11:47:42.493 に答える
0

ここで述べたように、.netのdoubleデータ型は15〜16桁ですが、あなたの場合は15であるため、最後の桁が省略されています。そもそもなぜdoubleを使っているのですか?これらのタイプとその使用法の詳細については、doubleとdecimalを参照してください。

于 2012-10-22T11:49:54.603 に答える