Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中从双精度到长精度的类型转换_Java_Typecasting Operator - Fatal编程技术网

JAVA中从双精度到长精度的类型转换

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 我想问

上述代码的输出长度为: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


我想问一下,为什么当我在双精度中取大数值时会发生这种情况。

为了最安全的铸造,你应该使用
数学。圆形(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);
  }
}