1

为什么我不能使用 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);
4

3 回答 3

3

您可以改用浮点数:

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
于 2013-05-25T22:55:42.277 回答
2

Math.round(double)将返回一个 long,它不能被隐式转换,因为你会失去精度。您必须将其显式转换为 int:

int ibat_avg = (int)Math.round(bat_avg*1000.00);
于 2013-05-25T22:56:39.063 回答
1

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

所以这两种解决方案是

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

或者

int ibat_avg = (int) Math.round(bat_avg*1000.00);
于 2013-05-25T22:56:36.557 回答