【问题标题】:type calculation in math expressions数学表达式中的类型计算
【发布时间】:2014-07-27 11:29:36
【问题描述】:

我正在为ocpjp做准备。

我知道:

byte * byte = int 

long * int = long

但我想知道float * float = float

float on float 可能是一个非常大的数字,为了在逻辑上将其转换为 double。

无论如何要通过考试,我应该知道所有规则。

请向我解释这些规则或只是指向相关的 jls 部分。

【问题讨论】:

  • @halex 是的。但如果你愿意 - 你可以澄清))它会更好
  • @Duncan 好的,我改变它
  • @halex - 抱歉 - 英语不好)

标签: java types type-conversion


【解决方案1】:

根据我的调查,我创建了以下规则:

if (statement contains double) 
   result-double
else if (statement contains float)
   result-float
else if (statement contains long)
   result - long
else 
    result - int

【讨论】:

    【解决方案2】:

    我想JLS的相关部分是4.2.4 Floating-Point Operations

    如果数值运算符的至少一个操作数是 double 类型,则使用 64 位浮点算术执行运算,数值运算符的结果是 double 类型的值。如果另一个操作数不是双精度,则首先将其扩展(第 5.1.5 节)以通过数字提升(第 5.6 节)键入双精度。

    否则,使用32位浮点运算进行运算,数值运算符的结果是float类型的值。(如果另一个操作数不是float,它首先通过数字提升扩展为浮点类型。)

    因此,如果您将两个 float 值相乘,则会执行 32 位运算。如果值太大,会溢出到无穷大。

    如果将floatdouble 相乘,则结果将是double,并且float 将在运算过程中扩展为64 位值。

    【讨论】:

    • 如果将浮点数乘以长整数,结果将是长整数 long num = 5l*4f;这是编译错误
    • @gstackoverflow 抱歉,我是说double
    • 抱歉,我的意思是重复! - 我没看懂这条信息
    • @gstackoverflow 请参阅我回答的最后一段。自从您制作this comment 后,我进行了编辑。我的回答中是否有任何部分仍然让您感到困惑?我认为它解决了您最初的问题..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2016-05-26
    • 1970-01-01
    • 2011-11-07
    • 2015-12-03
    相关资源
    最近更新 更多