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++) {
//将数组转换为字符串类型,再赋值给bd2
BigDecimal 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.8099999999999998
double 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