为什么 float 数据类型在使用大数字时会产生奇怪的输出

Why does float data type gives weird output when casted with large numbers

我试图了解在 spark 中使用 Float 数据类型进行转换时大数的行为。

上图中的最后一个 select 语句给出了非常突然的输出。

提前致谢!

输出不突兀。它只是截断 floating-point 表示的局限性的演示。 Spark 中的 FloatType 由 Java 的 float - 32-bit IEEE754 floating-point number 支持。它有 24 位的尾数,但 MSB 总是 1,因此实际精度只有 23 位。

123456789.6 是 1.8396495223045348... x 226。 1.8396495223045348 是 1.110101101111001101000101011001... 二进制。将其限制为仅 24 位会导致 1.11010110111100110100011(最后一位向上舍入),十进制为 1.8396495580673218。乘以 226 得到 123456792.