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

时间:2013-02-27 12:52:26

标签: java types rounding precision

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

float f;
long l;
double d;

f = l;
d = l;

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

2 个答案:

答案 0 :(得分:5)

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

或者反过来看一下,看看最近的float表示到Long.MAX_VALUE。现在查看距离float最近的Long.MAX_VALUE - 1表示...

除了其他任何内容之外,您应该能够计算出并非每个long都只能通过数据类型的大小表示为float:有2个 32 float的{​​{1}}的可能位模式(并非所有都是正常数字)和long的2 64 可能的位模式。

答案 1 :(得分:-1)

原因:浮动32位,长在java中是64位