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 比较大小

发布了156 篇原创文章 · 获赞 159 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/HaHa_Sir/article/details/102868941