为什么BigDecimal构造函数实例具有不同的值?

时间:2015-07-08 14:57:00

标签: java bigdecimal

我不知道为什么会这样:

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

1 个答案:

答案 0 :(得分:1)

你的问题都在Javadoc中明确说明。

  
      
  1. 此构造函数的结果可能有些不可预测。有人可能会认为在Java中编写新的BigDecimal(0.1)会创建一个   BigDecimal正好等于0.1(未缩放的值为1,带有   比例为1),但它实际上等于   0.1000000000000000055511151231257827021181583404541015625。这是因为0.1不能完全表示为double(或者为此)   重要的是,作为任何有限长度的二进制分数)。因此,价值   传入构造函数的不完全等于   0.1,尽管有外观。
  2.   
  3. 另一方面,String构造函数是完全可预测的:编写新的BigDecimal(“0.1”)会创建一个BigDecimal,   正如人们所期望的那样,正好等于0.1。因此它是   一般建议使用String构造函数   偏爱这一个。
  4.