1

値が動的に取得され、値が0.94289988675であるdoubleがあります。また、値が0.94289988777である別のdoubleがあります。2つの値を比較する必要があります。しかし、それは彼らが同じではないと言っています。これらの値の最初の4桁まで比較するにはどうすればよいですか。

コード

for (z = 0; z < something.Count(); z++)
{
    if (largest == Math.Round(0.94289988675 [z],4))
    {
        //proceed
    }
}

最大=0.942899886750.94289988675[z]は0.94289988777になります。zはです。

ループにはなりません。私を助けてください。

4

2 に答える 2

10

最初の4ビットまで比較するにはどうすればよいですか

私はあなたが4ビットではなく4桁を意味すると仮定します。

差の絶対値を取るだけです:

if (Math.Abs(largest - 0.94289988675) < 0.0001) 
{
    //proceed
}

等式は浮動小数点型ではかなり難しい概念であり、単純なものは決して使用しないでください==

于 2013-03-15T11:57:44.007 に答える
7

浮動小数点値が等しいかどうかをテストすることはありません。これまで。任意のプログラミング言語。これを処理する最も一般的な方法は、一方を他方から減算し、この差を一般にイプシロンと呼ばれる少数と比較することです。あなたの場合、最初の4桁は0.001が適切かもしれません。両方の数値の差がイプシロン値よりも小さい場合、それらは等しいと見なされます。

double x = ?;
double y = ?;
double epsilon = 0.001;

var difference = Math.Abs(x - y);

var isEqual = difference < espilon;

これには定数を使用しないでくださいDouble.Epsilon。それはただ悪い命名です、それは完全に無関係な何かのためです。

于 2013-03-15T12:01:13.873 に答える