【发布时间】:2012-10-29 03:09:24
【问题描述】:
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance 返回 double 并且 getAttackRange 返回 int。上面的代码是 if 语句的一部分,它必须是真的。那么比较有效吗?
谢谢
【问题讨论】:
-
你试过了吗?成功了吗?
-
你自己试过了吗??一个简单的 java 代码测试就足够了。检查我的答案是否相同
-
它是有效的,但是如果你没有在双精度上指定精度,你可能会在极端情况下得到有趣的结果...
-
鉴于@PinnyM 的警告,我应该指出将
int转换为double是无损的,但将long提升为double是有损的。也就是说,有一些long类型的值不存在double类型的确切值,因此转换会丢失信息。int到double不是这样,int到float也是如此。 -
@NathanD.Ryan 是的,我实际上是在用正确的东西进行测试,但是以错误的方式简化了评论。与此同时,我用我的代码修复了另一个小问题,所以这是失败的最小长:
long l = (1L << 53) + 1; double d = l; System.out.println((long)d == l);
标签: java comparison int double primitive-types