Day42--四捨五入
使用Math.round()
方法
- 原理及用法:
Math.round()
是 Java 標準庫中Math
類提供的一個用於對浮點數進行四捨五入取整的靜態方法。它接收一個double
型別的引數,會根據這個引數的小數部分按照四捨五入的規則返回一個最接近的long
型別的整數。例如,如果傳入的引數是12.3
,則返回12
;如果傳入的引數是12.6
,則返回13
。 - 程式碼示例:
在你的Student
類中,修改getAverageScore
方法如下:
public double getAverageScore(int[] scores) {
int sum = 0;
for (int i : scores) {
sum += i;
}
double average = (double) sum / scores.length;
// 使用Math.round()進行四捨五入,由於返回值是long型別,需再轉換回double型別
average = (double) Math.round(average * 100) / 100;
return average;
}
這裡先將平均數average
乘以100
,是為了將需要保留的小數位(這裡想要保留兩位小數)移動到整數位上,然後使用Math.round()
進行四捨五入取整,得到一個long
型別的結果,再將這個結果除以100
並轉換回double
型別,就實現了對平均數保留兩位小數的四捨五入操作。
-
Math.round()
方法-
語法和基本用法
-
Math.round()
是java.lang.Math
類中的一個靜態方法,用於將一個浮點數進行四捨五入取整。它有兩種過載形式:public static long round(double a)
:用於將一個double
型別的浮點數四捨五入轉換為long
型別的整數。例如:
double num1 = 12.3; long result1 = Math.round(num1); System.out.println(result1); // 輸出為12,因為12.3四捨五入後為12
public static int round(float a)
:用於將一個float
型別的浮點數四捨五入轉換為int
型別的整數。例如:
float num2 = 12.7f; int result2 = Math.round(num2); System.out.println(result2); // 輸出為13,因為12.7四捨五入後為13
-
-
原理和舍入規則
- 當小數部分大於等於
0.5
時,向上取整;當小數部分小於0.5
時,向下取整。例如,對於12.5
,Math.round(12.5)
會返回13
;對於12.49
,Math.round(12.49)
會返回12
。
- 當小數部分大於等於
-
侷限性
- 它主要用於簡單的取整操作。如果需要精確控制小數位數進行四捨五入,比如保留兩位小數,
Math.round()
本身不能直接滿足這個需求。需要結合其他操作,如先將數字乘以相應的倍數(如保留兩位小數就乘以100
),進行四捨五入後再除以這個倍數,這樣操作相對複雜且容易出錯。
- 它主要用於簡單的取整操作。如果需要精確控制小數位數進行四捨五入,比如保留兩位小數,
-
-
BigDecimal
類-
引入和用途
BigDecimal
位於java.math.BigDecimal
包中,用於高精度的十進位制算術運算。在處理貨幣、財務資料或者需要精確控制小數位數和舍入方式的數值計算時非常有用,因為浮點數(float
和double
)在計算機內部儲存方式的原因,可能會導致精度丟失和不準確的計算結果,而BigDecimal
可以避免這些問題。
-
構造方法
-
可以透過多種方式構造
BigDecimal
物件:- 使用
BigDecimal(String val)
建構函式:這是最常用的方式,透過傳入一個表示數字的字串來建立BigDecimal
物件,這樣可以確保精確地表示數字。例如:
BigDecimal bd1 = new BigDecimal("12.345");
- 也可以從其他基本資料型別轉換而來,但這種方式可能會引入精度問題(不推薦),如
BigDecimal(double val)
建構函式。因為double
型別本身的精度問題,在將double
值轉換為BigDecimal
時可能已經丟失了精度。例如:
double num = 12.345; BigDecimal bd2 = new BigDecimal(num); // 可能會出現精度問題,因為num在儲存為double時可能已經有精度損失
- 使用
-
-
舍入模式和
setScale
方法BigDecimal
提供了多種舍入模式,這些舍入模式是透過BigDecimal
類中的常量來表示的,如ROUND_UP
(向上舍入)、ROUND_DOWN
(向下舍入)、ROUND_HALF_UP
(四捨五入)等。setScale(int newScale, int roundingMode)
方法用於設定BigDecimal
物件的小數位數(newScale
引數)和舍入模式(roundingMode
引數)。例如:
BigDecimal bd3 = new BigDecimal("12.345"); bd3 = bd3.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(bd3); // 輸出為12.35,將12.345按照四捨五入保留兩位小數
-
算術運算方法
BigDecimal
提供了加(add
)、減(subtract
)、乘(multiply
)、除(divide
)等算術運算方法。例如:
BigDecimal num1 = new BigDecimal("2.5"); BigDecimal num2 = new BigDecimal("1.5"); BigDecimal sum = num1.add(num2); System.out.println(sum); // 輸出為4.0
- 需要注意的是,在進行除法運算時,如果除不盡可能會丟擲
ArithmeticException
異常,所以通常需要指定舍入模式。例如:
BigDecimal dividend = new BigDecimal("10"); BigDecimal divisor = new BigDecimal("3"); BigDecimal quotient = dividend.divide(divisor, 2, BigDecimal.ROUND_HALF_UP); System.out.println(quotient); // 輸出為3.33,將10除以3,結果保留兩位小數並四捨五入
-