有没有一种优雅的方式来断言数字相等而忽略它们的类?我想在 JUnit 测试框架中使用它,但是例如
Assert.assertEquals(1,1L)
因 java.lang.AssertionError 失败:预期:java.lang.Integer<1> 但为:java.lang.Long<1>
我希望某处有一个很好的方法,它只比较值并适用于 int、long、float、byte、double、BigDecimal、BigInteger,你可以命名它......
最佳答案
一种需要一些开销的解决方法是将值包装在 BigDecimal 中。对象,因为 BigDecimal
构造函数重载采用 long
、int
和 double
原语。
由于 new BigDecimal(1l).equals(new BigDecimal(1.0))
持有 true
,
Assert.assertEquals(new BigDecimal(1.0), new BigDecimal(1l));
应该适合你。
编辑
作为 Hulk如下所述,BigDecimal
对象的比例用于 equals
比较,但不用于 compareTo
比较。
虽然使用 long
的构造函数的比例设置为默认 0
,但它是通过使用 double
的构造函数中的一些计算推断出来的。
因此,比较值的最安全方法(即在 double
值的边缘情况下)可能是通过调用 compareTo
并检查结果是 0
代替。
关于java - 断言等于 int long float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242135/