網上的說法繁雜,看起來諸多不便,並且有的說法也不太準確,在這裏 做一下求證。用的較多的4個參數:
BigDecimal.ROUND_UP 這個方法做直接進位處理,但是有個特殊情況需要考慮,如果將要捨棄的位上的值是0,不做進位處理。
BigDecimal.ROUND_DOWN 這個方法做直接捨棄處理
BigDecimal.ROUND_HALF_UP 這個方法就是大名鼎鼎的四捨五入
BigDecimal.ROUND_HALF_DOWN 這個方法準確來說,是五舍六入
import java.math.BigDecimal;
/**
*
* @author yangcq
* Java常用商業計算工具類BigDecimal的精度設置方法setScale()詳解
*
*/
public class BigDecimalTest {
public static void main(String[] args) {
bigDecimalTest();
}
private static void bigDecimalTest(){
BigDecimal bigDecimal_01 = new BigDecimal("918.845");
BigDecimal bigDecimal_02 = new BigDecimal("918.844");
BigDecimal bigDecimal_03 = new BigDecimal("918.846");
bigDecimal_01.setScale(3);
bigDecimal_01.setScale(2,BigDecimal.ROUND_UP);
bigDecimal_01.setScale(2,BigDecimal.ROUND_DOWN);
bigDecimal_01.setScale(2,BigDecimal.ROUND_HALF_UP);
bigDecimal_01.setScale(2,BigDecimal.ROUND_HALF_DOWN);
System.out.println("測試數據:" + bigDecimal_01);
System.out.println("BigDecimal.ROUND_UP = " + bigDecimal_01.setScale(2,BigDecimal.ROUND_UP));
System.out.println("BigDecimal.ROUND_DOWN = " + bigDecimal_01.setScale(2,BigDecimal.ROUND_DOWN));
System.out.println("BigDecimal.ROUND_HALF_UP = " + bigDecimal_01.setScale(2,BigDecimal.ROUND_HALF_UP));
System.out.println("BigDecimal.ROUND_HALF_DOWN = " + bigDecimal_01.setScale(2,BigDecimal.ROUND_HALF_DOWN));
System.out.println("測試數據:" + bigDecimal_02);
System.out.println("BigDecimal.ROUND_UP = " + bigDecimal_02.setScale(2,BigDecimal.ROUND_UP));
System.out.println("BigDecimal.ROUND_DOWN = " + bigDecimal_02.setScale(2,BigDecimal.ROUND_DOWN));
System.out.println("BigDecimal.ROUND_HALF_UP = " + bigDecimal_02.setScale(2,BigDecimal.ROUND_HALF_UP));
System.out.println("BigDecimal.ROUND_HALF_DOWN = " + bigDecimal_02.setScale(2,BigDecimal.ROUND_HALF_DOWN));
System.out.println("測試數據:" + bigDecimal_03);
System.out.println("BigDecimal.ROUND_UP = " + bigDecimal_03.setScale(2,BigDecimal.ROUND_UP));
System.out.println("BigDecimal.ROUND_DOWN = " + bigDecimal_03.setScale(2,BigDecimal.ROUND_DOWN));
System.out.println("BigDecimal.ROUND_HALF_UP = " + bigDecimal_03.setScale(2,BigDecimal.ROUND_HALF_UP));
System.out.println("BigDecimal.ROUND_HALF_DOWN = " + bigDecimal_03.setScale(2,BigDecimal.ROUND_HALF_DOWN));
// BigDecimal.ROUND_UP 這個方法做直接進位處理,但是有個特殊情況需要考慮,如果將要捨棄的位上的值是0,不做進位處理。
BigDecimal bigDecimal_04 = new BigDecimal("918.850");
System.out.println("測試數據:" + bigDecimal_04);
System.out.println("BigDecimal.ROUND_UP = " + bigDecimal_04.setScale(2,BigDecimal.ROUND_UP));
System.out.println("BigDecimal.ROUND_DOWN = " + bigDecimal_04.setScale(2,BigDecimal.ROUND_DOWN));
System.out.println("BigDecimal.ROUND_HALF_UP = " + bigDecimal_04.setScale(2,BigDecimal.ROUND_HALF_UP));
System.out.println("BigDecimal.ROUND_HALF_DOWN = " + bigDecimal_04.setScale(2,BigDecimal.ROUND_HALF_DOWN));
}
}
-------------------------------------控制檯輸出:----------------------------------------------
測試數據:918.845
BigDecimal.ROUND_UP = 918.85
BigDecimal.ROUND_DOWN = 918.84
BigDecimal.ROUND_HALF_UP = 918.85
BigDecimal.ROUND_HALF_DOWN = 918.84
測試數據:918.844
BigDecimal.ROUND_UP = 918.85
BigDecimal.ROUND_DOWN = 918.84
BigDecimal.ROUND_HALF_UP = 918.84
BigDecimal.ROUND_HALF_DOWN = 918.84
測試數據:918.846
BigDecimal.ROUND_UP = 918.85
BigDecimal.ROUND_DOWN = 918.84
BigDecimal.ROUND_HALF_UP = 918.85
BigDecimal.ROUND_HALF_DOWN = 918.85
測試數據:918.850
BigDecimal.ROUND_UP = 918.85
BigDecimal.ROUND_DOWN = 918.85
BigDecimal.ROUND_HALF_UP = 918.85
BigDecimal.ROUND_HALF_DOWN = 918.85