繁体   English   中英

浮点数二进制促销

[英]Binary Numeric Promotion for Floats

在5.6.2中的JLS中。 二进制数值促销:

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

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

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

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

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

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

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

这让我感到困惑,因为http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.htmlhttps://alvinalexander.com/java/java-int-double-float-混合类型分算术规则

指出

在执行算术运算之前,算术运算(+,-,*,/)中的所有浮点值(浮点和双精度)都将转换为双精度类型。

根据我的理解,根据JLS,将1浮点数和1整数相加将导致浮点数。 但是,根据其他消息来源,将1 float和1 integer相加将导致double?

当消息来源提出违背JLS的主张时,很可能错了。 在这种情况下,以下内容演示了JLS描述的行为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM