如何在Java中将long转换为int?
如何在Java中将long转换为int?
简单的types铸造应该这样做:
long l = 100000; int i = (int) l;
但是,请注意,大数(通常大于2147483647
,小于-2147483648
)会丢失一些比特,并且表示不正确。
例如, 2147483648
将被表示为-2147483648
。
Long x = 100L; int y = x.intValue();
对于小的值,铸造就足够了:
long l = 42; int i = (int) l;
但是, long
可以比int
更容纳更多的信息,所以在一般情况下不可能完全地从long
转换为int
。 如果long
小于或等于Integer.MAX_VALUE
,则可以通过强制转换而不丢失任何信息。
例如,下面的示例代码:
System.out.println( "largest long is " + Long.MAX_VALUE ); System.out.println( "largest int is " + Integer.MAX_VALUE ); long x = (long)Integer.MAX_VALUE; x++; System.out.println("long x=" + x); int y = (int) x; System.out.println("int y=" + y);
在我的机器上产生以下输出:
largest long is 9223372036854775807 largest int is 2147483647 long x=2147483648 int y=-2147483648
注意y
上的负号。 由于x
保存的值比Integer.MAX_VALUE大1,因此int y
无法保存它。 在这种情况下,它缠绕到负数。
如果你想亲自处理这个案例,你可能会这样做:
if ( x > (long)Integer.MAX_VALUE ) { // x is too big to convert, throw an exception or something useful } else { y = (int)x; }
所有这些假设都是正数。 对于负数,请使用MIN_VALUE
而不是“MAX_VALUE”
如果使用Guava库 ,则有方法Ints.checkedCast(long)
和Ints.saturatedCast(long)
将long
转换为int
。
从Java 8开始,您可以使用:Math.toIntExact(long value)
请参阅JavaDoc:Math.toIntExact
返回long参数的值; 如果值溢出一个int,则抛出一个exception。
Math.toIntExact
在JDK 8中的源代码:
public static int toIntExact(long value) { if ((int)value != value) { throw new ArithmeticException("integer overflow"); } return (int)value; }
long x = 3; int y = (int) x;
但是假设long
int
可以表示为一个int
,你知道两者之间的区别吗?
您可以使用Long包装器来代替long原语,并调用Long.intValue() http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#intValue ()
它舍入/截断长整型值,以适应int。
在Java中,long是一个有符号的64位数字,这意味着您可以存储-9,223,372,036,854,775,808和9,223,372,036,854,775,807(含)之间的数字。
另一方面,int是32位的数字,这意味着你可以存储-2,147,483,648和2,147,483,647(含)之间的数字。
所以如果你的长时间超出了整数的允许值,你将不会得到有价值的转换。
有关原始Javatypes的大小的详细信息:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
如果直接投射显示错误,你可以这样做:
Long id = 100; int int_id = (int) (id % 100000);
Long l = 100; int i = Math.round(l);
在Java中,有一个严格的方法来将长整型转换为整型
不仅可以将lnog转换为int,任何types的extends数字都可以转换为其他Numbertypes,这里我将向您展示如何将long转换为int,反之亦然。
Long l = 1234567L; int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);