小编典典
只需对您的代码进行一些小的修改即可(为了清楚起见,使用了一些var重命名):
double sum = 0; //average will have decimal point
for(int i=0; i < args.length; i++){
//parse string to double, note that this might fail if you encounter a non-numeric string
//Note that we could also do Integer.valueOf( args[i] ) but this is more flexible
sum += Double.valueOf( args[i] );
}
double average = sum/args.length;
System.out.println(average );
注意,循环也可以简化:
for(String arg : args){
sum += Double.valueOf( arg );
}
编辑:OP似乎要使用args数组。这似乎是一个String数组,因此相应地更新了答案。
更新 :
正如zoxqoj正确指出的那样,上面的代码未考虑整数/双精度溢出。尽管我假设输入值将足够小而不会出现问题,但以下代码段可用于非常大的输入值:
BigDecimal sum = BigDecimal.ZERO;
for(String arg : args){
sum = sum.add( new BigDecimal( arg ) );
}
这种方法有几个优点(尽管速度较慢,所以不要将其用于时间紧迫的操作):
保持精度,将精度加倍,您将逐渐降低数学运算数量的精度(或完全不获得精确的精度,具体取决于数字)
实际上消除了溢出的可能性。但是请注意,a BigDecimal可能大于a double或的大小long。
2020-10-16