SQL计算占比做除法时乘以1.0和1.00是否存在差异?
两段SQL的精度差异说明
两段代码仅存在系数小数位的区别:前者乘1.0,后者乘1.00,具体差异如下:
- 绝大多数场景下二者无实际差异
你测试返回结果一致属于正常情况,两个系数的核心作用都是将整数类型的count计算结果转为数值类型,避免SQL整数除法默认截断小数的问题,最终计算精度由数据库的默认类型转换规则决定,和系数的小数位数无关。 - 仅部分对定点数精度有严格规则的数据库存在微小差异
以SQL Server为例,1.0默认识别为DECIMAL(2,1)类型(总长度2位,小数位1位),1.00默认识别为DECIMAL(3,2)类型(总长度3位,小数位2位)。如果没有显式指定结果精度,当计算结果的小数位超出系数默认小数位时,1.00的写法会保留更多有效小数位:比如计算结果为0.276时,1.0计算可能返回0.3,1.00计算可能返回0.28。 - 若需完全统一精度,更推荐显式控制结果精度
可通过ROUND(计算表达式, 保留小数位数)或者CAST(计算表达式 AS DECIMAL(总长度,小数位))实现,比调整系数的小数位更可控,兼容性也更好。
内容的提问来源于stack exchange,提问作者Chris90
相关产品推荐
相关产品推荐

