题目描述:
⼩明有
2
元,买东⻄花了
1.1
元,问找零多少,请⽤
Java
代码描述上述过程!
注意:观察程序运算输出是否能得到
0.9
,如果不能,请解决该精度问题。
传统解法:
发现结果是:
0.8999999999999999
因为
double
类型存储的是浮点数,存在精度问题,有两种解决方案。
方案一:
使⽤
DecimalFormat
对结果进⾏格式化,保留⼀位⼩数
public class Change {
public static void main(String[] args) {
double money = 2.0;
double price = 1.1;
double change = money-price;
/*
* 因为double类型存储的是浮点数,存在精度问题,
* 所以需要使⽤DecimalFormat对结果进⾏格式化,保留⼀位⼩数
*/
DecimalFormat df = new DecimalFormat("#0.0");
System.out.println("找零:" + df.format(change)); // 输出找零结果0.9
}
}
方案二:
借助BigDecimal
类型可以解决上述精度问题,
Java
中的
BigDecimal 类可以解决上述精度问题。BigDecimal 可以表示任意精度的⼗进制数,因此可以⽤它来处理需要⾼精度计算的场景,例如⾦融计算。(推荐)
public class Change {
public static void main(String[] args) {
BigDecimal money = new BigDecimal("2.0"); // 给定的⾦额
BigDecimal price = new BigDecimal("1.1"); // 购买商品的价格
double change = money.subtract(price).doubleValue();; // 计算找零
System.out.println("找零:" + change); // 输出找零结果0.9
}
}