Java實現若干個數計算平均值並保留小數位 java計算平均值 java四捨五入保留小數

Java實現若干個數計算平均值並保留小數位 java計算平均值 java四捨五入保留小數

 

一、需求

1、在項目中,要計算若干個指標的平均值,找了一圈,發現JDK中沒有提供,於是乎,造一個。

2、因若干個指標不確定,這裏使用可變參數來表示,易於參數傳遞。

3、因求取平均值後,可能會有若干位小數,需要對小數位進行處理,分別使用 java.math.BigDecimaljava.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 比較大小

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章