BigDecimal习题
1.定义一个double类型的数组
double[] array={1.2, 0.6, 0.01, 3.2, 5.56, 7.21};
2.使用BigDecimal求数组中元素的平均值,保留2位小数(四舍五入)
注意:每一个元素都需要封装为BigDecimal对象,才能进行运算,运算的结果也是BigDecimal对象
解法一:将double类型的数组转化为字符串数组,再将字符元素用BigDecimal两两相加,精准计算
public class Demo2 {public static void main(String[] args) {double[] array={1.2, 0.6, 0.01, 3.2, 5.56, 7.21};//定义BigDecimal对象用于求和BigDecimal sum =new BigDecimal("0");for (int i = 0; i < array.length; i++) {//将数组转换为字符串类型,再赋值给bd2BigDecimal bd2 =new BigDecimal(String.valueOf(array[i]));if(sum!=null){sum =bd2.add(sum);}}System.out.println(sum);System.out.println("平均值为: "+sum.divide(BigDecimal.valueOf(array.length),2,BigDecimal.ROUND_HALF_UP));}
}打印结果
-------------------------------------------
17.78
平均值为: 2.96
解法二:
//相加可能出现精度损失(几率很小)
public class Demo2{public static void main(String[] args) {double[] array={1.2, 0.6, 0.01, 3.2, 5.56, 7.21};//double类型相加可能会出现精度损失(由于计算机表示二进制的数达到上限则会舍去一部分)//double[] array={1.2, 0.6, 0.01};//相加值为1.8099999999999998double sum =0;//先将数组求和for (int i = 0; i < array.length; i++) {sum+=array[i];}System.out.println(sum);//再将和转化为BD对象BigDecimal bd1 =new BigDecimal(String.valueOf(sum));//数组长度转化为BD对象BigDecimal bd2 =new BigDecimal(String.valueOf(array.length));//再将和与数组长度相除System.out.println("平均值为: "+bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP));}
}打印结果
-------------------------------------------
17.78
平均值为: 2.96