java Math.round()比較特殊的四捨五入 public class MathTest {
public static void main(String[] args) {
System.out.println("小數點後第一位=5");
System.out.println("正數:Math.round(11.5)=" + Math.round(11.5));
System.out.println("負數:Math.round(-11.5)=" + Math.round(-11.5));
System.out.println();
System.out.println("小數點後第一位<5");
System.out.println("正數:Math.round(11.46)=" + Math.round(11.46));
System.out.println("負數:Math.round(-11.46)=" + Math.round(-11.46));
System.out.println();
System.out.println("小數點後第一位>5");
System.out.println("正數:Math.round(11.68)=" + Math.round(11.68));
System.out.println("負數:Math.round(-11.68)=" + Math.round(-11.68));
}
}
運行結果:
1、小數點後第一位=5
2、正數:Math.round(11.5)=12
3、負數:Math.round(-11.5)=-11
4、
5、小數點後第一位<5
6、正數:Math.round(11.46)=11
7、負數:Math.round(-11.46)=-11
8、
9、小數點後第一位>5
10、正數:Math.round(11.68)=12
11、負數:Math.round(-11.68)=-12
根據上面例子的運行結果,我們還可以按照如下方式總結,或許更加容易記憶:
1、參數的小數點後第一位<5,運算結果為參數整數部分。
2、參數的小數點後第一位>5,運算結果為參數整數部分絕對值+1,符號(即正負)不變。
3、參數的小數點後第一位=5,正數運算結果為整數部分+1,負數運算結果為整數部分。
終結:大於五全部加,等於五正數加,小於五全不加。
還有一個問題就是奇進偶舍的原則
今天客戶跑過來跟我說,我們程式裡面計算的價格不對,我檢查了一下,發現價格是經過折算後的價格,結果是可能小數位較多,而單據上只能列印兩位價格,所以就對價格調用Math.Round(price,2)函數進行四捨五入。
而出現問題的單價就是1.805,函數Math.Round(1.805,2)的傳回值卻是1.80,按照四捨五入的原則,結果應該是1.81才對。
在一番google之後,發現微軟是對了,是我們錯了。:(
原來四捨五入也有個國際慣例,叫奇進偶舍,意思是當舍入位前面一位是奇數時,就進,為偶數時,就舍,這也是體現公平性的原理。
可是國際慣例往往在國內很多企業行不通,為了應付他們的要求,採用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。