C# の次のコードは動作しません。
int iValue = 0;
double dValue = 0.0;
bool isEqual = iValue.Equals(dValue);
それで、質問です: Double と Int を比較する最良の方法は何でしょうか?
ベストアンサー1
浮動小数点値と整数値を単純に比較することはできません。特に、古典的な浮動小数点 表現の課題あなたができる次のように、一方から他方を減算して、その差が指定した精度より小さいかどうかを確認します。
int iValue = 0;
double dValue = 0.0;
var diff = Math.Abs(dvalue - iValue);
if( diff < 0.0000001 ) // need some min threshold to compare floating points
return true; // items equal
自分にとって何を意味するのかを自分で定義する必要がありますequality
。たとえば、浮動小数点値を最も近い整数に丸めて、3.999999981 が 4 に「等しい」ようにしたい場合があります。または、値を切り捨てて、実質的に 3 になるようにしたい場合もあります。すべては、何を達成しようとしているかによって異なります。
編集:例としてしきい値として 0.0000001 を選択したことに注意してください。比較に十分な精度は自分で決める必要があります。通常の表現境界内に収まる必要があることを認識してください。double
これは次のように定義されると思いますDouble.Epsilon
。