如何测试BigDecimal值

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实例的正确方法是什么?我的大多数测试用例在浮点后都会有零.

Mar*_*eel 5

问题是BigDecimal.equals遵循这条规则:

将其BigDecimal与指定Object的相等性进行比较.与compareTo此不同,此方法只考虑两个BigDecimal对象的值和比例相等(因此,当通过此方法进行比较时,2.0不等于2.00).

2020.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)将导致BigDecimal20(标度0).