Я пытаюсь преобразовать сумму, которая хранится как STRING, в число с плавающей запятой, используя функцию CAST, и строка, такая как «4166.691», получает тип, приведенный к 4166.69091796875.
select cast('184435.290' как число с плавающей запятой) дает 184435.296875
Почему это происходит? Как я могу правильно ввести это значение?
Редактировать:
select cast('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, и может представлять десятичные числа с большей точностью.