2

私は仕事でいくつかのユニットテストを行っていましたが、アサーションの1つに特有のエラーが表示されました。expectedValueとactualValueは両方ともdoubleであることに注意してください。

Assert.AreEqual(expectedValue, actualValue);

例外は、それらが等しくないことを述べ、「期待値:<6.8>実際の値:<6.8>」を詳しく説明しました。

期待値はハードコードされた6.8であり、実際の値は、分類方法(EqualRecordsやJenksNatural Breaksなど)を通過するデータベース値を使用して定式化されます。

私の推測では、違いはおそらく2つの値の仮数が最下位ビットまで類似していることです。2つの値が十分に近いかどうかを確認するためにイプシロンを含めるようにテストを更新しましたが、仮数をそのdoubleを表示した場合の表示値と一致させる方法があるかどうか知りたいです。そのような仮数補正は存在しますか?

4

3 に答える 3

3

仮数を表示値と一致させることの意味が完全にはわかりません...たとえば、正確に0.1であるdouble値はありません

ただし、doubleの正確な値を表示するコードが必要な場合は、次のような簡単なDoubleConverter.csファイルがあります。

 double d = 0.1;
 string x = DoubleConverter.ToExactString(d);

もう1つの方法は、doubleをstringに変換するときに、ラウンドトリップ形式指定子( "r")を使用することです。これにより、後で同じ正確な値を再現するのに十分な情報が結果に含まれることが保証されます。つまり、の場合x != yx.ToString("r") != y.ToString("r")

于 2010-08-16T16:39:17.130 に答える
1

両方を文字列に変換して、actualValue.ToString("0.000")それらの文字列を比較することができます。

それはあなたの要件に厳密に一致するようにすることができます。

于 2010-08-16T16:40:40.260 に答える
0

デフォルトの表示値が一致するかどうかをテストする場合は、デフォルトの表示値を比較するだけです。

Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());
于 2010-08-16T17:07:16.560 に答える