无法从 long 转换为 int,为什么我不能使用 Math.round 将此双精度四舍五入到最接近的 int



为什么我不能四舍五入到最接近的整数使用数学。round,我得到这个错误"cannot convert from long to int"

    Double bat_avg = Double.parseDouble(data[4])/Double.parseDouble(data[2]);
    int ibat_avg = Math.round(bat_avg*1000.00);
    System.out.println(bat_avg);

你可以用float代替:

Float bat_avg = Float.parseFloat(data[4]) / Float.parseFloat(data[2]);
int ibat_avg = Math.round(bat_avg * 1000.00f);
System.out.println(bat_avg);

Math.round有两个版本:

  • Math.round(double d)返回long
  • Math.round(float)返回int

Math.round(double)将返回一个long类型,它不能隐式强制转换,否则会失去精度。必须显式地将其转换为int类型:

int ibat_avg = (int)Math.round(bat_avg*1000.00);

Math.round(Double)返回一个long。Math.round(float)返回int值

所以这两个解是

int ibat_avg = Math.round((float) bat_avg*1000.00);

int ibat_avg = (int) Math.round(bat_avg*1000.00);

最新更新