960

C# で double を使用している人をよく見かけます。double が精度を失うことがあることをどこかで読んだことは知っています。私の質問は、いつ double を使用し、いつ decimal 型を使用する必要があるかということです。お金の計算に適した型は? (つまり、1 億ドル以上)

4

7 に答える 7

1143

お金のために、常に小数。それが作成された理由です。

数値を正しく加算またはバランスを取る必要がある場合は、小数を使用してください。これには、財務上の保管や計算、スコア、または人々が手作業で行う可能性のあるその他の数値が含まれます。

数値の正確な値が重要でない場合は、速度を上げるためにdoubleを使用します。これには、すでに「有効桁数」が存在するグラフィックス、物理学、またはその他の物理科学の計算が含まれます。

于 2009-07-22T14:42:15.260 に答える
44

System.Single / float -7桁
System.Double / double -15-16桁
System.Decimal / decimal-有効数字28-29桁

私が間違ったタイプ(数年前)を使用して刺されてきた方法は、大量にあります:

  • £520,532.52-8桁
  • £1,323,523.12-9桁

あなたはフロートのために100万で不足しています。

15桁の金額:

  • £1,234,567,890,123.45

ダブルで9兆。しかし、除算と比較を行うと、より複雑になります(私は、浮動小数点と無理数の専門家ではありません。マークのポイントを参照してください)。小数と倍数を混在させると、問題が発生します。

10進数を使用すると、浮動小数点数が10進数に正確に近似しない​​可能性があるため、浮動小数点数を使用する数学演算または比較演算では、同じ結果が得られない場合があります。

10進数の代わりにdoubleを使用する必要があるのはいつですか?いくつかの同様のより詳細な答えがあります。

金銭的なアプリケーションdoubleの代わりに使用することは、マイクロ最適化です-それは私がそれを見る最も簡単な方法です。decimal

于 2010-02-04T12:06:45.613 に答える
39

Decimal は正確な値です。Double は概算値です。

USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
于 2009-07-22T14:59:57.273 に答える
27

お金の場合: decimal. doubleメモリのコストが少し高くなりますが、時々あるような丸めの問題はありません。

于 2009-07-22T14:39:09.040 に答える
10

お金の計算には必ず整数型を使用してください。
一見、浮動小数点型で十分に見えるかもしれないので、これはいくら強調してもしすぎることはありません。

Python コードの例を次に示します。

>>> amount = float(100.00) # one hundred dollars
>>> print amount
100.0
>>> new_amount = amount + 1
>>> print new_amount
101.0
>>> print new_amount - amount
>>> 1.0

かなり正常に見えます。

10^20ジンバブエドルでこれをもう一度試してください。

>>> amount = float(1e20)
>>> print amount
1e+20
>>> new_amount = amount + 1
>>> print new_amount
1e+20
>>> print new_amount-amount
0.0

ご覧のとおり、ドルは消えました。

整数型を使用すると、正常に動作します。

>>> amount = int(1e20)
>>> print amount
100000000000000000000
>>> new_amount = amount + 1
>>> print new_amount
100000000000000000001
>>> print new_amount - amount
1
于 2009-07-22T14:56:32.990 に答える
6

ビット幅以外の主な違いは、10 進数の指数の基数が 10 で、倍精度の基数が 2 であることだと思います。

http://software-product-development.blogspot.com/2008/07/net-double-vs-decimal.html

于 2011-11-26T13:23:34.993 に答える