(二)找零钱

曾经有过这样一个场景:一个物品价值1.1元,但是顾客只有2元零钱,这时候需要计算找给顾客剩余的零钱。
//找零钱
public String calTimeOfChange(){
System.out.println(2.00 – 1.10);
}
是否会显示0.90呢?不会,而是会显示0.8999999999999999。这是什么原因呢?在组成原理课上是这样讲的:计算机计算数值时,整数与整数计算,分数与分数计算,然后将两者计算之和合并起来。同时小数在计算机中的表示,其最高位是不参与计算的。所以0.10在当作double被计算机表示时,只是一个被认为无限接近0.10的值,所以计算结果就不能像我们预期的那样了。
在java中有三种发式可以实现预期的效果:(运行于jdk1.5)
1)
public String calTimeOfChange(){
java.text.DecimalFormat decimalFormat = new java.text.DecimalFormat(“#.##”);
System.out.println(decimalFormat.format(2.00 -1.00));
}
2)
public String calTimeOfChange(){
//调用BigDecimal构造函数要传入String
java.math.BigDecimal i = new java.math.BigDecimal(“2.00”);
java.math.BigDecimal j = new java.math.BigDecimal(“2.00”);
System.out.println(i.subtract(j));
}
3)
public String calTimeOfChange(){
System.out.printf(“%.2f%n”, 2.00 – 1.10);
}

你可能感兴趣的:(java,J#)