Java实现若干个数计算平均值并保留小数位 java计算平均值 java四舍五入保留小数

mac2026-04-04  3

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

 

最新回复(0)