【问题标题】:Binary Numeric Promotion for Floats浮点数的二进制数字提升
【发布时间】:2019-08-25 05:19:24
【问题描述】:

在 5.6.2 的 JLS 中。二进制数字提升:

当运算符对一对操作数应用二进制数值提升时,每个操作数都必须表示一个可转换为数值类型的值,按顺序适用以下规则:

如果任何操作数属于引用类型,则将对其进行拆箱转换(第 5.1.8 节)。

加宽原语转换(第 5.1.2 节)适用于转换以下规则中指定的一个或两个操作数:

如果任一操作数是 double 类型,则另一个将转换为 double。

否则,如果任一操作数为浮点类型,则将另一个转换为浮点类型。

否则,如果其中一个操作数是 long 类型,则另一个将转换为 long。

否则,两个操作数都转换为 int 类型。

这让我很困惑,因为两者 http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.htmlhttps://alvinalexander.com/java/java-int-double-float-mixed-type-division-arithmetic-rules

说明

算术运算(+、-、*、/)中的所有浮点值(float 和 double)在执行算术运算之前都会转换为 double 类型。

据我了解,根据 JLS,添加 1 个浮点数和 1 个整数会导致浮点数。但是,根据其他消息来源,添加 1 个浮点数和 1 个整数会导致双精度数?

【问题讨论】:

    标签: java type-promotion


    【解决方案1】:

    当消息来源提出与 JLS 相悖的声明时,很有可能是错误的。在这种情况下,以下演示了 JLS 描述的行为:

        Number n = 1 + 0.1f;
        System.out.println(n instanceof Float); // true
        System.out.println(n instanceof Double); // false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 2016-01-01
      相关资源
      最近更新 更多