如果我将数据类型long分配给数据类型float,为什么会出现舍入错误?

Tak*_*eru 0 java precision types rounding

我的老师提出的问题是:记下可能发生舍入错误的分配.这是Java.

float f;
long l;
double d;

f = l;
d = l;
Run Code Online (Sandbox Code Playgroud)

这是答案,但为什么呢?float的值和最大值较高,float是浮点数.相比之下,长期只是全数,那为什么会出现舍入错误呢?

Jon*_*eet 5

浮点数在绝对值上变得不那么准确,因为它们变大了.超过某一点,最接近的两个可精确表示的浮点数之间的差异大于1.

或者反过来看一下,看看最接近的float表示Long.MAX_VALUE.现在看看最接近的float表示Long.MAX_VALUE - 1...

除了其他任何东西之外,你应该能够计算出并不是每个longfloat只能通过数据类型的大小来表示:有2 32种可能的位模式float(并非所有这些都是正常数字)和2 64种可能的位模式对long.