无法从long转换为int,为什么我不能使用Math.round将此double舍入到最近的int

时间:2013-05-25 22:52:21

标签: java math double rounding

为什么我不能使用Math.round将此double舍入到最近的int,我得到此错误“无法从long转换为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);

3 个答案:

答案 0 :(得分:3)

您可以使用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

答案 1 :(得分:2)

Math.round(double)将返回一个long,因为你会失去精度而不能隐式地进行渲染。你必须明确地将它转换为int:

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

答案 2 :(得分:1)

Math.round(Double)返回一个长整数。 Math.round(float)返回一个int。

所以这两个解决方案是

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

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