【问题标题】:Java new BigDecimal generates another number [duplicate]Java new BigDecimal 生成另一个数字[重复]
【发布时间】:2019-10-08 23:40:25
【问题描述】:

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

new BigDecimal(21.30);

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

21.30000000000710522735760100185871124467578125

另一个号码

new BigDecimal(23.11)

返回

23.1099999994315658113818187512921995859375

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

【问题讨论】:

  • 能否以minimal reproducible example 的形式提供用于创建 XML 的代码?
  • 你试过new BigDecimal("21.30");new BigDecimal("23.11");

标签: java bigdecimal


【解决方案1】:

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

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

如果您查看 BigDecimal java 文档,您会发现您必须使用带有 String 参数的构造函数才能得到您需要的行为。

【讨论】:

  • 简单地添加new BigDecimal("23.11") 会很好。使用反引号 ` 引用其他文本中的代码。代码块使用 4 个空格的缩进。
  • 以上引用文字摘自the constructor documentation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
相关资源
最近更新 更多