为什么 JUnit assertEquals( -0.0, 0.0 ) 会失败?
Why does JUnit assertEquals( -0.0, 0.0 ) fail?
我在 Java SE 11 中使用 JUnit 5,发现 assertEquals(-0.0,0.0) 失败。这是为什么? Java 本身对“-0.== 0.”非常满意。示例代码如下。
double dVar1 = 0;
double dVar2 = -dVar1;
System.out.println( dVar1 == dVar2 ); // true
System.out.println( -0. == 0. ); // true
assertEquals( dVar1, dVar2, .00001 ); // passes
assertEquals( 0.0, -0.0, .0001 ); // passes
assertEquals( 0.0, -0.0 ); // fails
assertEquals( dVar1, dVar2 ); // fails
Java对-0和0没有问题。
但是在 assertEquals 方法中使用 Double class 中的这个方法将参数转换为 longBits
返回的值不一样。
public static long doubleToLongBits(double value) {
long result = doubleToRawLongBits(value);
// Check for NaN based on values of bit fields, maximum
// exponent and nonzero significand.
if ( ((result & DoubleConsts.EXP_BIT_MASK) ==
DoubleConsts.EXP_BIT_MASK) &&
(result & DoubleConsts.SIGNIF_BIT_MASK) != 0L)
result = 0x7ff8000000000000L;
return result;
}
在您的情况下,您必须使用第一个基于数学运算的 assertEquals(double expected, double actual, double delta):return doublesAreEqual(value1, value2) || Math.abs(value1 - value2) <= 增量
我在 Java SE 11 中使用 JUnit 5,发现 assertEquals(-0.0,0.0) 失败。这是为什么? Java 本身对“-0.== 0.”非常满意。示例代码如下。
double dVar1 = 0;
double dVar2 = -dVar1;
System.out.println( dVar1 == dVar2 ); // true
System.out.println( -0. == 0. ); // true
assertEquals( dVar1, dVar2, .00001 ); // passes
assertEquals( 0.0, -0.0, .0001 ); // passes
assertEquals( 0.0, -0.0 ); // fails
assertEquals( dVar1, dVar2 ); // fails
Java对-0和0没有问题。 但是在 assertEquals 方法中使用 Double class 中的这个方法将参数转换为 longBits 返回的值不一样。
public static long doubleToLongBits(double value) {
long result = doubleToRawLongBits(value);
// Check for NaN based on values of bit fields, maximum
// exponent and nonzero significand.
if ( ((result & DoubleConsts.EXP_BIT_MASK) ==
DoubleConsts.EXP_BIT_MASK) &&
(result & DoubleConsts.SIGNIF_BIT_MASK) != 0L)
result = 0x7ff8000000000000L;
return result;
}
在您的情况下,您必须使用第一个基于数学运算的 assertEquals(double expected, double actual, double delta):return doublesAreEqual(value1, value2) || Math.abs(value1 - value2) <= 增量