public static void main(String[] args) {
System.out.println(2.0-1.1);
}
}
打印出来如图所示,等于 0.8999999999999999
为什么呢?
java中的double值用在数学方面来运算是没有问题.
但是在二进制中,计算十分之一(1/10)就会出现无限循环的数.
同理在十进制中,对三分之一进行运算会出现无限循环的数字.(1/3 => 0.333333333333)
怎么不让java编译不出现这种情况呢 !
java就提供了一个类,专门做整数操作的(BigInteger),还有一个类专门做浮点类型操作的(BigDecimal),它们都是Number的子类.
在BigDecimal的类里面有String构造器来构造.
例如在java编译器里,下面的乘法运算BigDecimal构造器,.
b1=获得book的值+"" 转成字符串.
b2=获得quantity的值.
b3=b1乘以(b2).
返回一个b3的double值.
public double getSubtotal(){
/*
* 使用BigDecimal不会有误差
* 要求必须使用String类型的构造器
*/
BigDecimal b1 = new BigDecimal(book.getCurrPrice() + ""); //一加 "" 就让这个数变成字符串了
BigDecimal b2 = new BigDecimal(quantity + "");
BigDecimal b3 = b1.multiply(b2); //multiply 乘以
return b3.doubleValue();
// 转换为上面的写法 return book.getCurrPrice() * quantity;
}
这样使得在二进制里面的运算不会产生误差.