小组Java

《Java核心技术卷一》中对类型转换有如下表述:

使用两个不同数值类型进行二元操作时先要将两个操作数转换为同一种类型,然后再进行计算,如果两个操作数中有一个是double类型的,另一个操作数就会转换为double类型,否则,如果其中一个操作数是float类型,另一个操作数就会转换为float类型,否则,如果其中一个操作数是long类型,另一个操作数就会转换为long类型,否则,如果其中一个操作数是int类型,另一个操作数就会转换为int类型。

LZ想问一下为何double的转换优先级比long高,虽然double能表示的最大值因为科学计数法的原因比long的大,但long的很多数是double表示不了的,因为double能表述的最大有效数位是15,究竟是什么原因使得出现double类型时long要强制转换为double?

4 收藏


直接登录
最新评论
  • 扳转在手 Ingénieur 2016/01/06

    高精度类型自动转向低精度,所以在程序中有精度损失

    • 四环的守护者 MTS 2016/01/07

      但程序设计语言中应该防止这种精度损失额,比如int转float不就是怕有数值缺失才自动转的吗?现在权衡数值范围和精度是一件非常头疼的事情啊。

  • HelloWorld   2016/01/06

    double可表示更大的值,防止溢出吧

  • 光光头去打酱油 全干工程师(公司打杂的) 2016/01/06

    1L 正解

    System.out.println(Long.MAX_VALUE);//最大数:9223372036854775807
    System.out.println(Long.MIN_VALUE);//最小数:-9223372036854775808

    System.out.println(Double.MAX_VALUE);//最大数:1.7976931348623157E308
    System.out.println(Double.MIN_VALUE);//最小数:4.9E-324

  • 米米. 金融圈的Java程序媛 2016/01/07

    1L正解,楼上点赞!
    不过有高精度类型自动转换成低精度类型的吗?

    • @request java架构攻城狮 2016/01/22

      没有办法自动转换,但是可以通过包装类进行精度计算后再次转入.然后自动拆箱

  • 龙雀 野生程序员 2016/01/25

    难道不更该吐槽long转float吗。

    精度缺失是能容忍的,因为截断的是后面的位。如果反过来double转long,那就会出现1l==1.2d,这个你怎么办?