JAVA中从双精度到长精度的类型转换
上述代码的输出长度为:5,与预期一致 但当我运行以下代码时:JAVA中从双精度到长精度的类型转换,java,typecasting-operator,Java,Typecasting Operator,上述代码的输出长度为:5,与预期一致 但当我运行以下代码时: class test{ public static void main(String... args){ double d=5.637; System.out.println("double is:"+d); long a=(long)d; System.out.println("long is:"+a); } } 输出不符合预期。结果是long是:9223372036854775807 我想问
class test{
public static void main(String... args){
double d=5.637;
System.out.println("double is:"+d);
long a=(long)d;
System.out.println("long is:"+a);
}
}
输出不符合预期。结果是long是:9223372036854775807
我想问一下,为什么当我在双精度中取大数值时会发生这种情况。为了最安全的铸造,你应该使用
数学。圆形(d)
,最大长尺寸是9223372036854775807,你试图将更大的双精度值分配给长
编辑:您可以使用BigInteger而不是Long此双精度的Long形式与Long中允许的最大值交叉。当
double
值超过Long
的最大值时,从double
到Long
的结果是Long。max_值
,即9223372036854775807
:[When]浮点数转换为long
,[…]值[太大(大幅度的正值或正无穷大),结果[…]是long
类型的最大可表示值。
class test{
public static void main(String... args){
double d=12345678901234567890.637;
System.out.println("double is:"+d);
long a=(long)d;
System.out.println("long is:"+a);
}
}