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)