我正在进行单元测试,我有这条线:
assertEquals(1.1886027926838422606868849265505866347, 1.18860279268384230000000000000000000000,0);
如果delta为0,则它们必须完全相同才能通过,而且它们显然不是,但是这个测试通过,请自己尝试。
将增量更改为1E-50仍然会通过。
当它们是两个非常不同的数字时,它为什么会通过?
答案 0 :(得分:10)
这是因为Java编译器将这两个数字文字舍入到相同的数字。
运行此实验:
System.out.println(1.1886027926838422606868849265505866347);
System.out.println(1.18860279268384230000000000000000000000);
这会打印相同的数字(demo):
1.1886027926838423
1.1886027926838423
double
基元类型最多只能处理16个小数位,因此它不能将这些数字一直表示到最后一位数。
如果您想要完全精确,请改用BigDecimal
。
答案 1 :(得分:0)
两个数字之间的差异太小而无法表示,因此它们相等。你得到大约16位十进制数字。