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
文法:
Math.round(x);
參數:
x 為一數值。
解釋:
方法。返回對參數x四捨五入後所得的整數近似值。
round
public static long round(double a)
返回最接近參數的 long。結果將舍入為整數:加上 1/2,對結果調用 floor 並將所得結果強制轉換為long 類型。換句話說,結果等於以下運算式的值:
(long)Math.floor(a + 0.5d)
特殊情況如下: 如果參數為 NaN,那麼結果為 0。 如果結果為負無窮大或任何小於等於 Long.MIN_VALUE 的值,那麼結果等於Long.MIN_VALUE 的值。 如果參數為正無窮大或任何大於等於 Long.MAX_VALUE 的值,那麼結果等於Long.MAX_VALUE 的值。
參數: a - 舍入為 long 的浮點值。 返回: 舍入為最接近的 long 值的參數值。 round
public static int round(float a)
返回最接近參數的 int。結果將舍入為整數:加上 1/2,對結果調用 floor 並將所得結果強制轉換為int 類型。換句話說,結果等於以下運算式的值:
(int)Math.floor(a + 0.5f)
特殊情況如下: 如果參數為 NaN,那麼結果為 0。 如果結果為負無窮大或任何小於等於 Integer.MIN_VALUE 的值,那麼結果等於Integer.MIN_VALUE 的值。 如果參數為正無窮大或任何大於等於 Integer.MAX_VALUE 的值,那麼結果等於Integer.MAX_VALUE 的值。
參數: a - 要舍入為整數的浮點值。 返回: 舍入為最接近的 int 值的參數值。 ---------------------
4.3<4.4<4.5 so
math.round(4.3)=4
math.round(4.4)=4
math.round(4.5)=5
-4.6<-4.5 <-4.4 so
math.round(-4.6)=-5
math.round(-4.5)=-4
math.round(-4.4)=-4
-4.51 |-4.50 -4.49
4.49 | 4.50 4.51
因為是負數,所以臨界點都是在5的左側,文字上的“四捨五入”,讓人容易糊塗
四捨五入都是往右邊計算:
-----(-5)-----(-4.6)(-4.5)(-4.4)-----(-4)----------(0)----------(4)-----(4.4)(4.5)(4.6)-----(5)-----
-----(-5)<---(-4.6)(-4.5)---------->(-4)----------(0)----------(4)<----------(4.5)(4.6)--->(5)-----
-------------------------------(-4.4)--->(-4)---------(0)-----------(4)<---(4.4)----------------------------
注意這些數位位置關係,正數和負數並不是對稱關係,Math.round()的運算時都是由左向右運算,所以:
4.5四捨五入應該是取大值為5,-4.5也一樣,取大值為-4,因為-4>-4.5>-5
----------------------------
Math類中提供了三個與取整有關的方法:ceil,floor,round,這些方法的作用於它們的英文名稱的含義相對應,例如:ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結果為12,Math.ceil(-11.6)的結果為-11;floor的英文是地板,該方法就表示向下取整,Math.floor(11.6)的結果是11,Math.floor(-11.4)的結果-12;最難掌握的是round方法,他表示“四捨五入”,演算法為Math.floor(x+0.5),即將原來的數字加上0.5後再向下取整,所以,Math.round(11.5)的結果是12,Math.round(-11.5)的結果為-11.Math.round( )符合這樣的規律:小數點後大於5全部加,等於5正數加,小於5全不加。 讓我們看看JDK的說明:
(1)public static long round(double a)
returns the closest long to the argument. the result is rounded to an integer by adding 1/2, taking the floor of the result, and casting the result to type long. in other words, the result is equal to the value of the expression:
(long)math.floor(a + 0.5d)
(2)public static double floor(double a)
returns the largest(closest to positive infinity) double value that is not greater than the argument and is equal to a mathematical integer.special cases:
if the argument value is already equal to a mathematical integer, then the result is the same as the argument.
if the argument is nan or an infinity or positive zero or negative zero, then the result is the same as the argument.
parameters:
a - a value.
returns:
the smallest (closest to negative infinity) floating-point value that is not less than the argument and is equal to a mathematical integer.