为什么2 BigDecimal之间的这种比较失败了?

And*_*ili -1 java bigdecimal

在Java应用程序中,我有一个包含以下情况的单元测试:

BigDecimal rendimentoLordoProvvisiorioExpected = new BigDecimal(2.85000);
BigDecimal rendimentoLordoProvvisiorioDB = null;

rendimentoLordoProvvisiorioDB = pucManager.getRendimentoLordoProvvisorio(date);

assertTrue(rendimentoLordoProvvisiorioExpected.compareTo(rendimentoLordoProvvisiorioDB) == 0);
Run Code Online (Sandbox Code Playgroud)

所述的值rendimentoLordoProvvisiorioExpected变量被手动设置好的到2.85000和所获得的值rendimentoLordoProvvisiorioDB2.85000.

问题是,当我这样做时,比较assertTrue() JUnit函数

assertTrue(rendimentoLordoProvvisiorioExpected.compareTo(rendimentoLordoProvvisiorioDB) == 0);
Run Code Online (Sandbox Code Playgroud)

它失败是因为rendimentoLordoProvvisiorioExpected似乎是2.850000000000000088817841970012523233890533447265625而不是2.85000(已设置).

为什么?如何修改以前的代码以将rendimentoLordoProvvisiorioExpected设置为预期值2.85000

uoy*_*maz 6

使用BigDecimal rendimentoLordoProvvisiorioExpected = new BigDecimal("2.85000");而不是BigDecimal rendimentoLordoProvvisiorioExpected = new BigDecimal(2.85000); 你所做的是从double构建一个BigDecimal,并且双精度不准确.