Java實現若干個數計算平均值並保留小數位 java計算平均值 java四捨五入保留小數
一、需求
1、在項目中,要計算若干個指標的平均值,找了一圈,發現JDK中沒有提供,於是乎,造一個。
2、因若干個指標不確定,這裏使用可變參數來表示,易於參數傳遞。
3、因求取平均值後,可能會有若干位小數,需要對小數位進行處理,分別使用 java.math.BigDecimal 和 java.text.DecimalFormat 對小數位進行處理,都可以實現需求。
二、代碼實現
1、以 四捨五入模式,保留若干位小數。
/**
* description: java 實現若干個數計算平均值,並 四捨五入模式,保留若干位小數。
* @param scale 保留小數的個數
* @param nums 若干個字符數字
* @return Double
* @version v1.0
* @author w
* @date 2019年10月25日 下午9:53:07
*/
public static Double average(int scale ,String ...nums) {
if(ArrayUtils.isEmpty(nums)) {
return null;
}
Double sum = 0D;
for (String num : nums) {
sum += Double.valueOf(num);
}
BigDecimal decimal = BigDecimal.valueOf(sum/nums.length).setScale(scale, RoundingMode.HALF_UP);
return decimal.doubleValue();
}
2、 小數位取捨辦法,以 RoundingMode 爲準。
/**
* description: java 實現若干個數計算平均值,保留若干位小數。 --- 小數位取捨辦法,以 RoundingMode 爲準。
* @param scale 保留小數的個數
* @param roundingMode 小數取捨的模式。 向上、向下、四捨五入 等。
* @param nums 若干個字符數字
* @return Double
* @version v1.0
* @author w
* @date 2019年10月25日 下午9:55:42
*/
public static Double average(int scale ,RoundingMode roundingMode,String ...nums) {
if(ArrayUtils.isEmpty(nums)) {
return null;
}
Double sum = 0D;
for (String num : nums) {
sum += Double.valueOf(num);
}
BigDecimal decimal = BigDecimal.valueOf(sum/nums.length).setScale(scale, roundingMode);
return decimal.doubleValue();
}
3、使用 DecimalFormat 實現數字格式化。
/**
* description: java 實現若干個數計算平均值,保留若干位小數。 --- 使用 DecimalFormat 實現數字格式化。
* @param pattern 格式化模式
* @param nums nums 若干個字符數字
* @return String
* @version v1.0
* @author w
* @date 2019年10月26日 上午9:25:44
*/
public static String average(String pattern , String ...nums) {
if(ArrayUtils.isEmpty(nums)) {
return null;
}
Double sum = 0D;
for (String num : nums) {
sum += Double.valueOf(num);
}
DecimalFormat decimalFormat = new DecimalFormat(pattern);
String format = decimalFormat.format(sum/nums.length);
return format ;
}
4、測試:
@Test
public void test() {
Double average = average(2,"2.3","2.2","3.153");
System.out.println(average);
String average2 = average("#.######" ,"2.33","2.24","3.452");
System.out.println("average2:"+ average2);
// DecimalFormat 中 "#"和"0"的區別: "#"位數不夠爲空,"0"位數不夠,補0.
String average3 = average("#.000000" ,"2.3","2.2","3.33532");
System.out.println("average3:"+ average3);
}
5、結果如下:
2.55
average2:2.674
average3:2.611773
三、總結
1、上面任意一個方法,都可以實現若干個數計算平均值,對小數位的處理,分別使用了兩個不同的類來進行處理。 還有 String.format()應該也可以實現需求。
2、ArrayUtils 類,來自於 apache commons-lang3 包 。
java BigDecimal 遇到的坑 BigDecimal 注意點事項 BigDecimal 比較大小