当前位置: 首页 > 知识库问答 >
问题:

无法从long转换为int,为什么我不能用数学将这个double四舍五入到最接近的int。圆形的

范翰池
2023-03-14

为什么我不能四舍五入这个双到最近的int使用Math.round,我得到这个错误"不能从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个答案

於乐
2023-03-14

数学round(Double)返回一个long。数学round(float)返回整数。

所以这两个解决方案是

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

或者

int ibat_avg = (int) Math.round(bat_avg*1000.00);
方俊
2023-03-14

数学。round(double)将返回long,不能隐式转换,因为这样会失去精度。必须将其显式转换为int:

int ibat_avg = (int)Math.round(bat_avg*1000.00);
百里胜泫
2023-03-14

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

  • 数学。圆形(双d)返回long
  • 数学。四舍五入(浮点)返回int
 类似资料:
  • 问题内容: 如何将值转换为执行以下操作: 也就是说,答案总是四舍五入。 问题答案: 如果你明确地 投 来,小数部分将被截去。例如: 此外,如果需要返回值,也可以使用方法舍入值。

  • 问题内容: 我有两个Int值(它们必须是Ints),我希望它们在方程式中四舍五入到最接近的值; 该方程使变量始终向下舍入到最小值。例如,以下数字表示; 20000/7000等于2.857 …但是变量显示。 我如何舍入到最接近的数字 而不将其更改为Double 问题答案: 对于 非负 整数,以下函数以纯整数算术给出所需的结果: 例子: 这个想法是 这是任意签名的整数的一种可能实现,该整数也不会溢出:

  • 我有两个Int值(它们必须是Int ),当在一个等式中时,我希望它们四舍五入到最近的值; 此等式使变量始终四舍五入到最小值。例如,数字如下所示; 20000 / 7000 等于 2.857...但变量显示 。 如何使四舍五入到最接近的数字而不将其更改为双精度

  • 问题内容: Java中的所有数字都应为int类型。以下行在Java> 1.5中是合法的 同样的机制去和实例。但是龙的作品完全不同。以下代码给出了编译时错误 Long对长类型使用自动装箱方法,因此 我看不到为什么不能将int赋给Long变量。关于这个问题有什么想法吗? 问题答案: 我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lan

  • 问题内容: 现在我正在尝试: 在哪里,但它不起作用。我究竟做错了什么? 问题答案: 代码段中方法的返回类型是什么? 如果是这种方法,则当输入参数为Double时将返回Long。 因此,您将必须强制转换返回值:

  • 问题内容: 我需要在Java中将double转换为int,但是数值必须始终四舍五入。即99.99999999-> 99 问题答案: 强制转换为int会隐式删除任何小数。无需调用Math.floor()(假设为正数) 只需使用(int)进行类型转换,例如: 话虽这么说,它的行为与向负无穷大舍入