+-
java-Spark SQL sum函数对双精度值的问题
我们正在尝试使用Spark SQL sum函数对双精度值求和.

样本数据:

+------+
|amount|
+------+
|  1000|
|  1050|
|  2049|
+------+

示例代码:

df.select("amount").show();
df.registerTempTable("table");
sqlContext.sql("select amount/pow(10,2) from table").show();
sqlContext.sql("select sum((amount/pow(10,2))) from table").show();

精度后:

+-----+
|  _c0|
+-----+
| 10.0|
| 10.5|
|20.49|
+-----+

求和后输出:

+------------------+
|               _c0|
+------------------+
|40.989999999999995|
+------------------+

预期的输出为40.99,但是为什么给出的输出为40.989999999999995.

感谢对此的任何帮助.

最佳答案
确保总和评估为 decimal(Spark SQL映射).

例如:从表中选择sum(强制转换(数量为小数)/强制转换(pow(10,2)作为十进制)

我建议您将金额转换为十进制类型.

点击查看更多相关文章

转载注明原文:java-Spark SQL sum函数对双精度值的问题 - 乐贴网