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)作为十进制)
我建议您将金额转换为十进制类型.
标签:apache-spark-sql,aggregate-functions,java 来源: https://codeday.me/bug/20191026/1932860.html