是的,您的具體示例沒有問題,因爲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
值。
但是,有long
值不能表示爲double
s。這開始發生在long
值9_223_372_036_854_764
這是Long.MAX_VALUE/1000 - 10
。第一大(...765
)沒有double
副本,而下面的數字(...766
)沒有。換句話說,從...764
開始double
,增加尾數的最後一位給出...766
時轉換回long
。
來源
2017-01-14 18:42:49
NPE
是的。它是安全的。注意這裏是'double'而不是'float' - 但是同樣的規則適用。 –
@MattBall:好的。我顯然需要更多的咖啡。 – Makoto