是的,您的具体示例很好,因为
0和
1都可以精确地表示为
float。
请注意,通常情况下并非如此:有很多大
int值无法完全表示为
float。例如,即使2_000_000_001不等于2_000_000_000,也会打印以下内容
true(Ideone):
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值不能表示为
doubles。这开始于存在的
long值
9_223_372_036_854_764是
Long.MAX_VALUE/1000- 10。较大的数字(
...765)没有
double对应物,而后面的数字(
...766)有对应物。换句话说,从
...764a
开始,
double将
...766转换回时的尾数的最后一位递增
long。



