我在JavaSE11中使用JUnit5,发现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
1条答案
按热度按时间axkjgtzd1#
java对-0和0没有问题。但是在assertequals方法中,使用这个来自double类的方法将参数转换为longbits,并且返回的值不一样。
在您的例子中,您必须使用基于数学运算的first assertequals(double expected,double actual,double delta):return doublesareequal(value1,value2)| | math.abs(value1-value2)<=delta