它是有效的双重比较Java中的诠释?(Is it valid to compare a double

2019-06-21 00:52发布

Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

Utilities.getDistance返回双和getAttackRange返回INT。 上面的代码是一个if语句的一部分,它需要为真。 所以是比较有效?

谢谢

Answer 1:

是的,它是有效的-这将推动intdouble在进行比较之前。

见JLS节15.20.1(数值比较运算),可链接到JLS第5.6.2节(二元数字升级) 。

从后者:

加宽原语转换(§5.1.2)被施加到转换的任一个或由下面的规则中指定的两个操作数:

  • 如果操作数的类型是双,其他被转换为加倍。

  • ...



Answer 2:

当与两个不同的数值类型执行操作(包括比较),Java将执行隐式扩大转换。 这意味着,当你比较一个doubleint ,将int转换为double以便Java可以那么值比较两个double秒。 所以,简单的答案是肯定的,比较一个int和双是有效的,一个警告。

问题是,你不应该使用比较平等两个浮动-PIONT值==<=>=因为精度可能出现的错误的运营商。 另外,你需要要小心这双可以采取特殊值: NaNPOSITIVE_INFINITYNEGATIVE_INFINITY 。 我强烈建议你做一些研究,并进行比较时,了解这些问题, double秒。



Answer 3:

这应该是罚款。 在浮点运算/比较,如果一个参数是浮动/双然后另一个是INT也提升到了相同。



Answer 4:

是的,它是绝对有效的比较int数据类型和数据类型双..

int i =10;
double j= 10.0;
 if (i==j)
{
System.out.println("IT IS TRUE");
}


Answer 5:

是的,它有效的,你的代码应该按预期工作,没有任何毛刺,但这不是最好的做法,静态代码分析仪像SonarQube表示这是一个“大”,“臭虫”,

从sonarQube重大BUG IMG

从sonarQube重大BUG描述

所以,正确的方式做到这一点就可以了,

Double.compare(val1,val2)==0 

如果任何参数没有浮点变量,他们将晋升为浮点。



Answer 6:

一切都会安好的。

Java将简单地返回数值的真实等于:

    int n = 10;
    double f = 10.0;
    System.out.println(f==n);

上面的代码打印真实。



文章来源: Is it valid to compare a double with an int in java?