Java 在Junit测试中,如何比较两个ArrayList<;双倍>;使用assertEquals(),是否有更好的替代方案?

Java 在Junit测试中,如何比较两个ArrayList<;双倍>;使用assertEquals(),是否有更好的替代方案?,java,unit-testing,arraylist,junit,double,Java,Unit Testing,Arraylist,Junit,Double,我目前正在编写一个Junit测试,其中我使用assertEquals()来比较两个ArrayList的值 @测试 公开无效测试(){ 二次公式一=新的二次公式(3,4,-4); 列表结果=新建ArrayList(); 结果:增加(0.66666); 结果:增加(-2.0); assertEquals(results,one.getRoots()); } 但是,Junit打印出以下失败消息: expected:<[0.66666, -2.0]> but was:<[0.6666

我目前正在编写一个Junit测试,其中我使用
assertEquals()
来比较两个
ArrayList
的值

@测试
公开无效测试(){
二次公式一=新的二次公式(3,4,-4);
列表结果=新建ArrayList();
结果:增加(0.66666);
结果:增加(-2.0);
assertEquals(results,one.getRoots());
}
但是,Junit打印出以下失败消息:

expected:<[0.66666, -2.0]> but was:<[0.6666666666666666, -2.0]>
junit.framework.AssertionFailedError
应为:但为:
junit.framework.AssertionFailedError

我是否可以指定要比较测试的小数位数?我知道如何以一定的精度测试两个双精度值的相等性,但在比较两个双精度数组列表时是否可以实现这一点

我想你可以用BigDecimal代替Double


检查此项,以便了解更多信息,我想您可以使用BigDecimal而不是Double


勾选此项,以便了解更多信息,您可以使用
NumberFormat
BigDecimal

下面是第二轮谈判

    double d = 0.66666666;
    NumberFormat format = new DecimalFormat("#.##");
    System.out.println(format.format(d)); // 0.67
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(bigDecimal); // 0.67
如果你不想再来一次

    double d = 0.66666666;
    DecimalFormat format = new DecimalFormat("#.##");
    format.setRoundingMode(RoundingMode.DOWN);
    System.out.println(format.format(d)); // 0.66
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(2, RoundingMode.DOWN);
    System.out.println(bigDecimal); //0.66

您可以使用
NumberFormat
BigDecimal

下面是第二轮谈判

    double d = 0.66666666;
    NumberFormat format = new DecimalFormat("#.##");
    System.out.println(format.format(d)); // 0.67
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(bigDecimal); // 0.67
如果你不想再来一次

    double d = 0.66666666;
    DecimalFormat format = new DecimalFormat("#.##");
    format.setRoundingMode(RoundingMode.DOWN);
    System.out.println(format.format(d)); // 0.66
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(2, RoundingMode.DOWN);
    System.out.println(bigDecimal); //0.66