DecimalFormat处理1.24385,取四位小数的时候,得出的结果是1.2438,搜了下,DecimalFormat默认的是4舍,6入,5则奇入偶舍。
改了舍入方式,发现问题还是存在,在stackoverflow上发现是数据精度问题,由string转成bigdecimal再转换则没问题了,先记录下,后续有空再看看源码。

public static void test2() {
System.out.println("");
double a = 1.24385;
//将待处理的数据构建成BigDecimal类型的对象,该构造方法需要一个String类型的参数
System.out.println("原数:" + new BigDecimal(String.valueOf(a).toString()));
// String.valueOf() 方法,将基本类型转换为String类型
DecimalFormat df = new DecimalFormat("#.####");
df.setRoundingMode(RoundingMode.HALF_UP); //改为四舍五入模式
System.out.println("不使用BigDecimal提高精度:" + df.format(a));
System.out.println("转换为BigDecimal后:" + df.format(new BigDecimal(String.valueOf(a))));
}

Java——>>DecimalFormat类的一些坑点_string类


以下再补充double精度丢失问题:

​点此进入(用字符串创建BigDecimal与直接用double的区别)​