java - Java 中 float 的值在赋值时发生变化

标签 java floating-point

当我将2.3211232f作为值分配给Java中的float变量时,它被分配为2.3211231那个变量。 为什么会发生这种情况?

最佳答案

在 Java 中,浮点值以 2 的幂为单位。对于 2 到 4 之间的数字,float 使用的单位是 2−22。这是因为 float 具有 24 位有效数,因此,当高位表示 21 时(对于 2 到 4 之间的数字来说必须如此),低位表示 2< super>1−23 = 2−22

2−22 是 0.0000002384185791015625,因此 2 到 4 之间的可表示数字以该大小的步长间隔。 2.3211232 附近可表示的数字是:

  • 2.3211228847503662109375
  • 2.3211231231689453125000
  • 2.3211233615875244140625

其中,2.3211231231689453125000 最接近 2.3211232,因此,当源文本 2.3211232f 转换为 float 时,结果为 2.3211231231689453125000。

Java 的默认格式将其显示为“2.3211231”,因为它使用足够的十进制数字来唯一标识该值。它没有显示精确值的所有数字,因此它歪曲了该值。切勿将默认格式的结果作为实际值。

关于java - Java 中 float 的值在赋值时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672760/

相关文章:

java - OptaPlanner - 从另一个规则调用时全局变量为空

java - 加载 9-patch 图像作为 Libgdx Scene2d 按钮背景看起来很糟糕

c - 除以 2 的幂得到 float

java - 如何测试是否设置了变量?

Java SocketServer 正在接受来自 Socket 客户端的输入,但 Socket 客户端未接收来自 SocketServer 的输入

floating-point - 在 Golang 中将未知接口(interface)转换为 float64

python-3.x - 如何在Python中将十六进制值转换为 float

python - 比较 pandas 中的小数列值时出现问题

java - 如何将参数传递给 Timertask Run 方法

algorithm - 如何最好地总结大量 float ?