浮点运算的经典案例是货币运算,涉及类BigDecimal。
代码:
package zero;
import java.math.BigDecimal;
public class AccuratelyFloat {
public static void main(String[] args) {
double money=2.0;
double price=1.1;
double result=money-price;
System.out.println("非精确计算");
System.out.println("剩余金额:"+result);
//精确浮点的解决方法
BigDecimal money1=new BigDecimal("2.0");//现有金额
BigDecimal price1=new BigDecimal("1.1");//商品价格
BigDecimal result1=money1.subtract(price1);
System.out.println("精确计算");
System.out.println("剩余金额:"+result1);
}
}
运行结果:
非精确计算
剩余金额:0.8999999999999999
精确计算
剩余金额:0.9
注意:这里在创建BigDecimal类的实例时,在构造方法中一定要使用数字字符串作为参数。如果直接使用浮点数或改类型的变量作为参数,那么构造方法接受的是经过二进制存储的浮点,这样就是不精确的浮点数。