Sma*_*ajl 0 java junit unit-testing bigdecimal
我试图对产生BigDecimal输出的一些方法进行单元测试,但我对变化的precissio很困惑:
assertEquals(BigDecimal.valueOf(20), result);
Run Code Online (Sandbox Code Playgroud)
我最近使用构造函数(new BigDecimal(value)使用valueOf(value))切换了创建BigDecimal值,我的测试正在抱怨:
Expected :20
Actual :20.00
Run Code Online (Sandbox Code Playgroud)
设置BigDecimal.valueOf(20.00)没有用,所以我的问题是,测试这些浮点BigDecimal实例的正确方法是什么?我的大多数测试用例在浮点后都会有零.
问题是BigDecimal.equals遵循这条规则:
将其
BigDecimal与指定Object的相等性进行比较.与compareTo此不同,此方法只考虑两个BigDecimal对象的值和比例相等(因此,当通过此方法进行比较时,2.0不等于2.00).
而20和20.00不具有相同的规模.
你需要使用其中之一
new BigDecimal("20.00")
Run Code Online (Sandbox Code Playgroud)
要么
BigDecimal.valueOf(20).setScale(2)
Run Code Online (Sandbox Code Playgroud)
或者,如果你喜欢更深奥的选择
BigDecimal.valueof(2000, 2)
Run Code Online (Sandbox Code Playgroud)
的问题BigDecimal.valueOf(20.00)是,以下的规则BigDecimal.valueOf(double),这导致的一个BigDecimal 20.0(即,比例1),以及-略有不同- new BigDecimal(20.00)将导致BigDecimal的20(标度0).
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |