首页 > 解决方案 > Java new BigDecimal 生成另一个数字

问题描述

我使用 BigDecimal 数据类型,当我设置

new BigDecimal(21.30);

然后,我将它作为 xml 源返回,它显示为

21.30000000000710522735760100185871124467578125

另一个号码

new BigDecimal(23.11)

回来

23.1099999994315658113818187512921995859375

我想以与我在创建时设置的相同小数显示结果。

标签: javabigdecimal

解决方案


此构造函数的结果可能有些不可预测。有人可能会假设new BigDecimal(0.1)用 Java 编写的 aBigDecimal正好等于 0.1(未缩放的值 1,比例为 1),但它实际上等于 0.1000000000000000055511151231257827021181583404541015625。

这是因为 0.1 不能完全表示为 a double(或者,就此而言,不能表示为任何有限长度的二进制分数)。因此,传递给构造函数值并不完全等于 0.1,尽管看起来如此。

如果您检查 BigDecimal java 文档,您会发现您将不得不使用带有String参数的构造函数来结束您需要的行为。


推荐阅读