在 Databricks 中将 STRING 转换为 FLOAT

问题描述 投票:0回答:1

我正在尝试使用 CAST 函数和字符串将存储为 STRING 的金额转换为 FLOAT,例如将“4166.691”获取类型转换为 4166.69091796875

选择cast('184435.290'作为float)给出184435.296875

为什么会发生这种情况?如何正确输入强制转换此值?

编辑:

选择演员('184435.290'作为双)似乎工作正常

我不知道为什么会这样?

azure-databricks databricks-sql
1个回答
0
投票

在 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 提供更高的精度,可以更准确地表示十进制数。

© www.soinside.com 2019 - 2024. All rights reserved.