像这样比较浮点数和整数是否安全?
private static void foo(float n) {
if (n >= 1 || n <= 0) {
// code
}
}
根据JLS (5.6.2. Binary Numeric Promotion)如果参数之一是
float
,另一个转换为 float
对比前。但据我所知,如果转换后的浮点数与原始浮点数二进制相同,则这种比较将返回 true。我们如何确保它?
最佳答案
是的,您的具体示例很好,因为 0
和 1
可以精确地表示为 float
.
请注意,这通常不是真的:有很多大 int
不能完全表示为 float
的值.例如,以下打印出 true
( Ideone ) 即使 2_000_000_001 不等于 2_000_000_000:
import java.util.*;
import java.lang.*;
import java.io.*;
class FloatTest {
private static boolean isTwoBillion(float f) {
return f == 2_000_000_000;
}
public static void main (String[] args) {
System.out.println(isTwoBillion(2_000_000_001));
}
}
请注意,与
float
不同, double
有足够宽的尾数来存储每个 32 位 int
值(value)。但是,还有
long
不能表示为 double
的值s。这开始发生在 long
值(value) 9_223_372_036_854_764
这是 Long.MAX_VALUE/1000 - 10
.大一号 ( ...765
) 没有 double
对应,而下面的数字 ( ...766
) 是。换句话说,从 ...764
开始作为 double
, 增加尾数的最后一位给出 ...766
当转换回 long
.
关于java - 在 Java 中比较 float 和 int 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41653576/