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))));
}
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOzUTOzIDZiVjMzUjZ1ITZyYzX3ATNwgTM4IzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)