次のコードがある場合 (これは .NET で記述されています)
double i = 0.1 + 0.1 + 0.1;
なぜi
等しくないの0.3
ですか?
何か案は?
次のコードがある場合 (これは .NET で記述されています)
double i = 0.1 + 0.1 + 0.1;
なぜi
等しくないの0.3
ですか?
何か案は?
浮動小数点数について調べる必要があります。多くの 10 進数は 2 進数で正確に表現されていないため、完全に一致することはありません。
そのため、比較では次のことがよく見られます。
if (abs(a-b) < epsilon) { ...
ここで、必要な精度に応じて、epsilon は 0.00000001 などの小さな値になります。
Double は 64 ビットの浮動小数点データ型です。小数を近似値として格納します。正確な値が必要な場合は、2 進化 10 進数データ型である 10 進数データ型を使用してください。
浮動小数点演算の精度は保証されません。
表現には常に問題があるため、浮動小数点数との等価性はしばしば使用されません。通常、2 つの float の差を比較し、それが特定の値 (たとえば 0.0000001) より小さい場合、等しいと見なされます。
二重計算は正確ではありません。あなたには2つの解決策があります:
Decimal
正確なタイプを使用してください