HANA中STDDEV函数计算标准差与Excel/手动结果有误差的原因及解决办法
HANA标准差计算精度偏差问题说明
产生原因
- 核心是IEEE 754浮点数二进制存储精度问题:3.4、5.2这类十进制小数无法被二进制格式精确表示,经过标准差计算的多步运算(求均值、求差、平方、求和、开方)后,微小的精度误差会被累积放大,最终输出3.39999、5.1999这类和理论值极其接近的近似结果。
- Excel和手动计算采用十进制精度逻辑,且默认做了结果的自动四舍五入处理,所以会直接输出符合预期的3.4、5.2结果。
对应修复方案
- 通用业务场景直接对结果做精度舍入即可,使用
ROUND函数指定需要保留的小数位,示例SQL:SELECT ROUND(STDDEV(values), 1) AS stddev FROM 你的表名; - 对计算精度要求极高、不允许中间运算有误差的场景,先将计算字段转换为固定精度DECIMAL类型后再运算,示例SQL:
SELECT STDDEV(CAST(values AS DECIMAL(15, 5))) AS stddev FROM 你的表名; - 仅需要查询结果展示和Excel对齐的场景,可直接修改HANA会话的默认浮点输出参数,设置全局的舍入小数位数,不需要修改单条查询语句,适合批量查询场景。
内容的提问来源于stack exchange,提问作者Ayn76
相关产品推荐
相关产品推荐

