当前sql中的原生加减乘除会在apache iotdb数据库上造成精度问题

The native addition, subtraction, multiplication and division in the current sql will cause precision problems on apache iotdb database

目前SQL上的Float字段原生加减乘除会导致结果精度出现问题,如下图。这主要是因为在程序中将Float类型转换为Double类型时,没有对精度进行特殊处理。没有四次算术运算时不会出现这个问题,但是当有四次算术运算时问题就很明显了。 enter image description here

感觉这不是bug。正常

float +float 结果类型在 iOTDB 中被推断为 double。

Spark也一样spark-sql> select cast(cast(10.0 as float)+cast(51.71 as float) as double); 61.709999084472656

spark-sql> 解释扩展 select cast(cast(10.0 as float)+cast(51.71 as float) as double); == 解析后的逻辑计划 == '项目[unresolvedalias(cast((cast(10.0 as float) + cast(51.71 as float)) as double), None)] +- OneRowRelation

== 分析后的逻辑计划== CAST((CAST(10.0 AS FLOAT) + CAST(51.71 AS FLOAT)) AS DOUBLE): 双 项目[cast((cast(10.0 as float) + cast(51.71 as float)) as double) AS CAST((CAST(10.0 AS FLOAT) + CAST(51.71 AS FLOAT)) AS DOUBLE)#11] +- OneRowRelation

== 优化的逻辑计划== 项目 [61.709999084472656 AS CAST((CAST(10.0 AS FLOAT) + CAST(51.71 AS FLOAT)) AS DOUBLE)#11] +- OneRowRelation

== 实体计划 == *(1) 项目 [61.709999084472656 AS CAST((CAST(10.0 AS FLOAT) + CAST(51.71 AS FLOAT)) AS DOUBLE)#11] +- *(1) 扫描 OneRowRelation[]

纯数字需要用反引号括起来。例如: ‘root.giyc3eWpsoa.62.100.1002.**'