在Java中比较float和int安全吗?
这样比较浮点和整数安全吗在Java中比较float和int安全吗?,java,floating-point,Java,Floating Point,这样比较浮点和整数安全吗 private static void foo(float n) { if (n >= 1 || n <= 0) { // code } } 私有静态void foo(float n){ 如果(n>=1 | | n是,那么您的具体示例就可以了,因为0和1都可以精确地表示为浮点 请注意,通常情况下这是不正确的:有许多大的int值不能精确地表示为float。例如,以下打印出true(),即使2_000_000_001不等于2_0
private static void foo(float n) {
if (n >= 1 || n <= 0) {
// code
}
}
私有静态void foo(float n){
如果(n>=1 | | n是,那么您的具体示例就可以了,因为0
和1
都可以精确地表示为浮点
请注意,通常情况下这是不正确的:有许多大的int
值不能精确地表示为float
。例如,以下打印出true
(),即使2_000_000_001不等于2_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
值
但是,有一些long
值不能表示为double
s。这种情况从long
值9_223; u 372_036_854_764
开始出现,即long.MAX_值/1000-10
。较大的一号(…765
)没有double
对应项,而以下数字(…766
)是的。换句话说,从…764
开始,作为双精度,当转换回长的时,增加尾数的最后一位,得到…766
。是的。这是安全的。注意这里是双精度而不是浮点数
,但同样的规则适用。@MattBall:接得好。我显然是这样做的需要更多的咖啡。如果你能给我一杯咖啡那就太棒了example@MaksimDmitriev:我添加了一个示例。@NPE您的答案被用作dup目标,因此我添加了一些关于long
vsdouble
的信息。