如何在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