有没有一种优雅的方法可以在忽略它们的类的同时断言数字相等?我想在 JUnit 测试框架中使用它,但是例如
Assert.assertEquals(1,1L)
因 java.lang.AssertionError 失败:预期:java.lang.Integer<1> 但为:java.lang.Long<1>
我希望某处有一个很好的方法,它只比较值并与 int、long、float、byte、double、BigDecimal、BigInteger 一起工作,你可以命名它……
原文由 Pavel Niedoba 发布,翻译遵循 CC BY-SA 4.0 许可协议
One workaround with some overhead would be to wrap the values in BigDecimal objects, as
BigDecimal
constructor overloads takelong
,int
anddouble
primitives .由于
new BigDecimal(1l).equals(new BigDecimal(1.0))
持有true
,应该为你工作。
编辑
正如下面 绿巨人 所说,
BigDecimal
对象的比例用于equals
比较,但不用于compareTo
虽然比例设置为默认值0
对于采用long
的构造函数,它是通过采用double
的构造函数中的一些计算推断出来的因此,比较值的最安全方法(即在double
值的边缘情况下) 可能 是通过调用compareTo
并检查结果是0