【问题标题】:Why big decimal is appending more decimal values [duplicate]为什么大十进制附加更多十进制值[重复]
【发布时间】:2019-11-22 17:52:51
【问题描述】:

非常基础的问题,我正在尝试初始化一个值为 1.1 的 Big Decimal,当我打印它时,输出不完全是 1.1

BigDecimal bd1 = new BigDecimal(1.1);
System.out.println(bd1);

输出是

1.100000000000000088817841970012523233890533447265625

如果我使用“1.1”(作为字符串),或者如果我尝试打印 bd1.doubleValue(),它会起作用

有人可以解释一下这种行为吗?自动生成的那些额外的十进制数字是什么。

【问题讨论】:

标签: java bigdecimal


【解决方案1】:

这是因为你初始化它的数字 - 1.1 - 是一个浮点数!而作为浮点数,它不能准确地表示 0.1 - 当表示为二进制数时,0.1 有一个无限重复的尾巴。查看浮点数是如何表示的,这将是一个典型的例子。

以其他方式初始化,例如,使用 11 然后除以 10 - 你会得到你想要的。

one stack overflow answer among many 解释了浮点数的这个属性。

【讨论】:

  • 1.1double,而不是float(即1.1f
猜你喜欢
  • 2013-06-16
  • 2017-12-30
  • 2011-09-12
  • 2021-02-05
  • 1970-01-01
  • 2013-06-13
  • 2014-06-25
  • 2021-08-31
  • 2018-06-09
相关资源
最近更新 更多