我正在尝试使用 CAST 函数和字符串将存储为 STRING 的金额转换为 FLOAT,例如将“4166.691”获取类型转换为 4166.69091796875
选择cast('184435.290'作为float)给出184435.296875
为什么会发生这种情况?如何正确输入强制转换此值?
编辑:
选择演员('184435.290'作为双)似乎工作正常
我不知道为什么会这样?
在 Spark 中将字符串转换为浮点数时,由于浮点数的内部表示形式,可能会导致精度损失。 此问题并非 Spark 特有,而是计算机中浮点数存储的一个特性。
我已经尝试过以下方法:
df_casted = df.withColumn("amount_casted", col("amount").cast("double"))
df_casted.show()
结果:
+----------+-------------+
| amount|amount_casted|
+----------+-------------+
| 4166.691| 4166.691|
|184435.290| 184435.29|
+----------+-------------+
要正确地对值进行类型转换而不损失任何精度,您可以使用 double 数据类型而不是 float。 double 数据类型比 float 提供更高的精度,可以更准确地表示十进制数。