【问题标题】:Why BigDecimal constructor instance with differents values?为什么 BigDecimal 构造函数实例具有不同的值?
【发布时间】:2015-07-08 14:57:00
【问题描述】:

我不知道为什么会这样:

float flo = 196.7f;
BigDecimal bd = new BigDecimal(flo);
System.out.println(bd); //print 196.6999969482421875

BigDecimal bd2 = new BigDecimal(Float.toString(flo));
System.out.println(bd2); //print 196.7

【问题讨论】:

    标签: java bigdecimal


    【解决方案1】:

    Javadoc 中明确说明了您的两个问题。

    1. 此构造函数的结果可能有些不可预测。有人可能会假设用 Java 编写 new BigDecimal(0.1) 会创建一个 BigDecimal 正好等于 0.1(未缩放的值 1,与 比例为 1),但实际上等于 0.10000000000000000055511151231257827021181583404541015625。这是因为 0.1 不能完全表示为双精度数(或者,对于 物质,作为任何有限长度的二进制分数)。因此,价值 传递给构造函数的不完全等于 0.1,尽管外观。
    2. 另一方面,String 构造函数是完全可预测的:编写 new BigDecimal("0.1") 创建一个 BigDecimal 正如人们所期望的那样,恰好等于 0.1。因此它是 一般建议使用String构造函数 偏爱这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多