我想把Spark中的两列相乘。两列都是double类型。26.0和0.001之间的乘法结果是0.02600000000000002,而不是0.0026。如何解决此问题?
>>> df.printSchema()
root
|-- age: double (nullable = true)
|-- name: string (nullable = true)
|-- mul: double (nullable = false)
>>> df.withColumn('res', df['age']*df['mul']).show()
+----+--------+-----+--------------------+
| age| name| mul| res|
+----+--------+-----+--------------------+
|25.0| Ankit|0.001| 0.025|
|22.0|Jalfaizy|0.001| 0.022|
|20.0| saurabh|0.001| 0.02|
|26.0| Bala|0.001|0.026000000000000002|
+----+--------+-----+--------------------+
谢谢
3条答案
按热度按时间cnwbcb6i1#
将列四舍五入到4位小数:
uemypmqf2#
这些是浮点错误。一个简单的
1.1-1.0
给予0.10000000000000009
在python(或pyspark)中。你可以在这里或这个答案中找到更多关于他们的信息
四舍五入到适当的小数位似乎是解决这个问题的简单方法。
ljsrvy3e3#
将其转换为浮动: