ClickHouse中cast转换为Decimal类型时如何实现四舍五入?
ClickHouse Decimal类型转换实现四舍五入的方案
ClickHouse中直接使用
cast(数值 as Decimal64(N))做类型转换时,默认对超出精度的小数部分执行截断操作,不会触发四舍五入,因此cast(2.555555 as Decimal64(2))返回结果为2.55属于正常设计行为。
你目前使用的先调用round再做类型转换的方法是可行的全版本兼容方案,除此之外也可以根据你的ClickHouse版本选择更简化的实现方式:
- 通用兼容方案:和你当前的处理逻辑一致,先通过
round()函数完成小数位的四舍五入,再做Decimal类型强转,示例代码如下:
执行后返回结果为2.56,符合四舍五入的预期。SELECT cast(round(2.555555, 2) AS Decimal64(2)); - 高版本简化方案:如果你的ClickHouse版本≥21.9,可以直接使用
toDecimal64函数的第三个可选参数指定舍入模式,无需单独调用round函数:
其中SELECT toDecimal64(2.555555, 2, 'half_up');half_up就是常规的四舍五入模式,执行后会直接返回精度为2的Decimal64类型值2.56。
内容的提问来源于stack exchange,提问作者Henrik
相关产品推荐
相关产品推荐

