大家都知道Java中在计算一些小数的时候会出现精度丢失。在这里给出两种方法来解决这个问题
- 利用小数的格式化DecimalFormat
DecimalFormat df = new DecimalFormat("#.000");//保留3位小数
double a = 2.0;
double b = a - 0.111*5;
System.out.println(df.format(b));
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。
2.把两个数同时扩大相同倍数化为整数,计算出结果后再除以适当的倍数
double a = 2.0;
double b = a - 0.111 * 5;
a = 2.0 * 1000;
b = a - 0.111 * 5 * 1000;
b = b/1000*1.0;
System.out.println(b);