如何在Java中将double转换为int
时间:2020-01-09 10:35:28 来源:igfitidea点击:
在本文中,我们将介绍如何在Java中将double转换为int。
在Java中将double转换为int时的注意事项
将double转换为int时,我们需要考虑的两件事是
- double的范围远大于int,如果要转换为int的double超出了int的范围,则该如何处理。
- 在double值中,存在小数部分,而int没有小数部分,因此要考虑如何处理小数部分。小数部分可以被截断,或者我们需要将double值四舍五入到最接近的整数。
使用intValue()方法或者类型转换进行转换
我们可以使用Double类的intValue()方法(需要Double对象)或者通过显式类型将double值转换为int来将double转换为int。实际上,intValue()方法实现也进行类型转换,并在缩小原始转换后以int形式返回此Double的值。这两种方法的问题在于,在将double转换为int时,小数部分被截断时,不会舍入到最接近的整数。
使用intValue()方法将double转换为int
public class DoubleToInt { public static void main(String[] args) { Double d = 147.89d; int val = d.intValue(); System.out.println("Converted int value- " + val); } }
输出:
Converted int value- 147
在这里需要注意的几件事double值在将其转换为int时会被截断,这种转换方式需要Double类的实例。
使用显式转换将double转换为int
public class DoubleToInt { public static void main(String[] args) { double d = 147.89d; int val = (int)d; System.out.println("Converted int value- " + val); } }
输出:
Converted int value- 147
将double转换为int并四舍五入到最接近的整数
尽管以上两种方法都将double转换为int,但截断了小数部分,而不是将double舍入为最接近的整数,这在大多数情况下都不是我们想要的。为了进行舍入,必须使用Math.round(double d)方法,该方法返回最接近所传递参数的long。
由于返回值很长,因此需要进一步的转换才能将长值转换为int。
Math.round()方法还处理特殊情况:
- 如果参数为NaN,则结果为0。
- 如果参数为负无穷大或者任何小于或者等于Integer.MIN_VALUE的值,则结果等于Integer.MIN_VALUE的值。
- 如果参数为正无穷大或者任何大于或者等于Integer.MAX_VALUE的值,则结果等于Integer.MAX_VALUE的值。
使用Math.round()将double转换为int
public class DoubleToInt { public static void main(String[] args) { double d = 147.89d; int val = (int)Math.round(d); System.out.println("Converted int value- " + val); } }
输出:
Converted int value- 148
如我们所见,四舍五入到最接近的整数。由于方法Math.round(double d)的返回值很长,因此也需要强制转换为int。
具有不同双精度参数的示例
public class DoubleToInt { public static void main(String[] args) { double val1 = 1456.12; int i1 = (int)Math.round(val1); System.out.println("Converted int value- " + i1); double val2 = -567.99; int i2 = (int)Math.round(val2); System.out.println("Converted int value- " + i2); double val3 = 236.5646; int i3 = (int)Math.round(val3); System.out.println("Converted int value- " + i3); } }
输出:
Converted int value- 1456 Converted int value- -568 Converted int value- 237