【问题标题】:TypeCasting from double to long in JAVA [duplicate]JAVA中从double到long的类型转换[重复]
【发布时间】:2017-02-07 07:19:31
【问题描述】:
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 is : 5,和预期的一样。

但是当我运行以下代码时:

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);
  }
}

输出不如预期。结果是long is:9223372036854775807

我想问一下为什么我在双倍取大量数字时会发生这种情况。

【问题讨论】:

  • long 形式的这个 double 越过 long 中允许的最大值。
  • double的值超过long的最大值时,Narrowing Primitive Conversion (JLS §5.1.3)doublelong的结果是Long.MAX_VALUE,即9223372036854775807[当]浮点数转换为long,[...并且]值[是]太大(一个大的正值或正无穷大),结果[...]是long 类型的最大可表示值。

标签: java typecasting-operator


【解决方案1】:

为了最安全的转换,您应该使用 Math.round(d) 并且最大长尺寸为 9,223,372,036,854,775,807 您试图将更大的双精度值分配给长

编辑:您可以使用 BigInteger 而不是 Long

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多