现象1:未保留小数位数,仅有整数部分
使用类似如下的检索分析语句时,期望能够保留小数点两位数,但结果只有整数部分:
检索分析语句:
* | select count_if(status>=400)*100/count(*) as "错误日志百分比"
结果:
0
检索分析语句:
* | select round(count_if(status>=400)*100/count(*),2) as "错误日志百分比"
结果:
0
原因
SQL 中,整数(bigint)之间进行除法运算时,结果仍为整数,对整数使用 round 函数也是无效的。
解决办法
方法1:
在四则运算中,使用乘法将其中一个整数(bigint)转换为小数(double),例如:
* | select round(count_if(status>=400)*100.0/count(*),2) as "错误日志百分比"
方法2:
* | select round(cast(count_if(status>=400)*100 as double)/count(*),2) as "错误日志百分比"
现象2:小数位数保留不正确
使用类似如下的检索分析语句时,期望能够最终保留小数点2位数,但结果保留了14位数:
检索分析语句:
* | select round(count_if(status>=400)*1.0/count(*),5)*100 as "错误日志百分比"
结果:
99.99900000000001
原因
解决方法
将所有的运算进行完毕后,最终再统一保留小数位数,例如:
* | select round(count_if(status>=400)*100.0/count(*),3) as "错误日志百分比"