關於BigDecimal的四捨五入和截斷

2021-07-02 05:45:20 字數 2070 閱讀 5967

關於四捨五入:

round_half_up: 遇到.5的情況時往上近似,例: 1.5 ->;2

round_half_down : 遇到.5的情況時往下近似,例: 1.5 ->;1

bigdecimal a = new bigdecimal(1.5); system.out.println("down="+a.setscale(0,bigdecimal.round_half_down)+"\tup="+a.setscale

(0,bigdecimal.round_half_up));

結果:down=1 up=2

關於bigdecimal的截斷:

bigdecimal aa = new bigdecimal(99.999);

aa=aa.setscale(2,bigdecimal.round_down);

結果:aa=99.99,即在小數點後兩位處截斷。

其他引數說明

round_ceiling

如果bigdecimal是正的,則做round_up操作;

如果為負,則做round_down操作。

round_floor

如果bigdecimal為正,則作round_up;

如果為負,則作round_down。

round_half_down

若捨棄部分》 0.5,則作round_up;

否則,作round_down。

round_half_even

如果捨棄部分左邊的數字為奇數,則作round_half_up;

如果它為偶數,則作round_half_down。

round_half_up

若捨棄部分》=.5,則作round_up;否則作round_down。

round_unnecessary

該「偽捨入模式」實際是指明所要求的操作必須是精確的,

因此不需要捨入操作。

round_up

總是在非0捨棄小數(即截斷)之前增加數字。

(其實就是只要不是0,就進一位的意思)

round_down

從不在捨棄(即截斷)的小數之前增加數字(其實就是截斷的意思)。

bigdecimal.round_up 最後一位如果大於0,則向前進一位,正負數都如此。1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -2 -1.5-> -2 -1.8-> -2   

bigdecimal.round_down 最後一位不管是什麼都會被捨棄。向0的方向移動 1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -1   -1.5-> -1   -1.8> -1 

bigdecimal.round_ceiling 如果是正數,按round_up處理,如果是負數,按照round_down處理。例如7.1->8; -7.1->-7;所以這種近似的結果都會》=實際值。

bigdecimal.round_floor 跟bigdecimal_round_ceiling相反。例如7.1->7;-7.1->-8。這種處理的結果<=實際值。

bigdecimal.round_half_down 如果最後一位<=5則捨棄,如果》5, 向前進一位。如7.5->7;7.6->8;-7.5->-7

bigdecimal.round_half_up 最常見的四捨五入。

如果最後一位<5則捨棄,如果》=5, 向前進一位。反之捨棄。如7.5->8;7.4->7;-7.5->-8

bigdecimal.round_half_even 如果倒數第二位是奇數,按照bigdecimal.round_half_up處理,如果是偶數,按照bigdecimal.round_half_down來處理。如7.5->8;8.5->8;7.4->7;-7.5->-8

具體精確到幾位因該採用   

商=被除數.devide(除數,保留小數字數,精確方法)

精確方法:roundmode是指舍位時候的模式,傳引數的時候用bigdecimal.round_***x_***

關於BigDecimal資料的四捨五入

bigdecimal類的主要功能是進行小數的大數計算,而且最重要的是可以精確到指定的四捨五入位數。如果要進行四捨五入的操作,則必須依靠以下的方法 public bigdecimal divide bigdecimal divisor,int scale,int roundingmode scale ...

BigDecimal四捨五入保留小數的坑

用bigdecimal做四捨五入保留小數時要注意一點,引數建議是string型別。double型別存在精度問題的坑!下面直接放圖看 這是錄入的資料小數點後有7位 用string型別引數 數值保留六位並且四捨五入 cell.setcellstyle cellstyledouble bigdecimal...

BigDecimal的保留位數和四捨五入的方法

一 bigdecimal num new bigdecimal 2.225667 一般都會這樣寫最好 int count num.scale system.out.println count 6 返回的是小數點後位數 1.round down bigdecimal b new bigdecimal ...