19

2 つの値を比較する必要があります。1 つの値はprice、何かの現在の価格を表し、decimal実際にこの価格で何かを売買できるためです。

もう 1 つの値はestimatedPrice、数学的計算の結果であり、これdoubleによってestimation実際に「操作」を行うことはできません。esitmatedPrice

今なら買いたいですprice < estimatedPrice

では、価格を double にキャストするか、estimatedPrice を 10 進数にキャストする必要がありますか?

キャスト後に「少し別の」数字が得られることは理解していますが、他に選択肢がないようです。

4

4 に答える 4

18

それはデータに依存します。Decimal の方が精度が高くなります。double の方が範囲が広いです。double が 10 進数の範囲外にある可能性がある場合は、10 進数を double にキャストする必要があります (または、実際には、double 値が 10 進数の範囲外にある場合は、キャストせずに結果を返すメソッドを作成できます。以下の例を参照してください)。

この場合、double 値が 10 進数の範囲外になる可能性は低いと思われるため、(特に価格データを扱っているため) double を 10 進数にキャストする必要があります。

例 (いくつかのロジックを使用して NaN 値を処理できます):

private static int Compare(double d, decimal m)
{
    const double decimalMin = (double)decimal.MinValue;
    const double decimalMax = (double)decimal.MaxValue;
    if (d < decimalMin) return -1;
    if (d > decimalMax) return 1;
    return ((decimal)d).CompareTo(m);
}
于 2012-05-16T05:03:59.970 に答える
4

10進数と2倍!- どれをいつ使用すればよいですか?

精度を重視する場合は、10 進数に変換してください。そうでない場合は、ダブルスを使用してください。

于 2012-05-16T04:54:54.837 に答える
0

decimalに変換することをお勧めします。お金の価値を操作したいと思われるからです。しかし、私はこの短い答えを与えることができます: 正確な (特に金融アプリケーションのためにお金の値を操作する) アプリケーションでは、10 進数を使用します。リソースを減らして速度を上げたい場合は、double を使用します。

于 2012-05-16T05:07:11.063 に答える
0

私はこれまでソフトウェアで価格を扱ったことはありませんでしたが、私が聞いたところによると、多くは整数を扱っています。たとえば、$1.23 の場合、整数 123 として格納します。10 進数への変換は、結果をユーザーに出力するときに最後に行われます。

同様に、見積価格について、(たとえば) 100 倍の数値を処理できますか?

于 2012-05-16T04:59:39.017 に答える