十一、clickhouse取整函数
-- 1.向下取整:floor(x[,N])
SELECT floor(toFloat32(12.08098), 2), -- 12.08 floor(toFloat32(12.2323), 2), -- 12.23 floor(toFloat32(12.89788), -1), -- 10 floor(toFloat32(12.09590), 3), -- 12.095 (注意:如果按照正常的四舍五入,则应该是12.096,为什么呢?) floor(toFloat32(12.0987), 3),-- 12.098 floor(10, 2); -- 10
-- 2.四舍五入:round(expression [, decimal_places])
-- 如果decimal_places=0,则取整数; -- 如果>0,则将值舍入小数点右侧; -- 如果<0,则将小数点左侧的值四舍五入。 SELECT round(toFloat32(12.1234), 3), round(toFloat32(12.0025), 3), -- 12.002(注意:为什么不是12.003呢?) -- round函数只会最多保留三位有效数字 round(toFloat32(12.0025), 4), -- 12.002 round(toFloat32(12.0025002323), 100); -- 12.003 -- 示例: SELECT round(toFloat32(10 / 3)), -- 3 round(toFloat32(10 / 3), 2), -- 3.33 round(toFloat32(10.000/3), 3), -- 3.333 round(toFloat32(10.000/3), 6); -- 3.333 -- roundToExp2() 接收一个数字。如果数字小于1,则返回0。否则,它将数字向下舍入到最接近的(整个非负)2的x次幂。 SELECT roundToExp2(12.0129), -- 8 = 2^3 roundToExp2(toFloat32(0.01)); -- 0.008
-- 3.向上取整:ceil(x[, N]) 或者 ceiling(x[, N])
SELECT ceil(12.34343, 3), -- 12.344 ceil(toFloat64(12.34343), 3), -- 12.344 ceil(toFloat32(12.34343), 3), -- 12.344 ceil(12.0011, 3); -- 12.002
--4.返回绝对值小于或等于x
的最大绝对值的整数:trunc(x[, N]), truncate(x[, N])
SELECT trunc(12.34343, 3), trunc(toFloat64(12.34343), 3), truncate(toFloat32(12.34343), 3), truncate(12.0011, 3) Query id: 786d3b0f-0d29-4fd3-94b4-18cdaee03c4d ┌─trunc(12.34343, 3)─┬─trunc(toFloat64(12.34343), 3)─┬─trunc(toFloat32(12.34343), 3)─┬─trunc(12.0011, 3)─┐ │ 12.343 │ 12.343 │ 12.343 │ 12.001 │ └────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────┘
--5.银行家舍入方法:roundBankers
-
如果舍入数介于两个数字之间,则该函数使用银行家的舍入。
-
在其他情况下,该函数将数字四舍五入到最接近的整数。
使用银行家四舍五入,您可以减少四舍五入对这些数字相加或相减结果的影响。
例如,将数字 1.5、2.5、3.5、4.5 与不同的四舍五入相加:
- 无四舍五入:1.5 + 2.5 + 3.5 + 4.5 = 12。
- 银行家四舍五入:2 + 2 + 4 + 4 = 12。
- 四舍五入到最接近的整数:2 + 3 + 4 + 5 = 14。
句法
roundBankers(expression [, decimal_places])
论据
expression
— 要四舍五入的数字。可以是任何返回数值数据类型的表达式。decimal-places
— 小数位。一个整数。decimal-places > 0
— 该函数将数字四舍五入到小数点右侧的给定位置。示例:roundBankers(3.55, 1) = 3.6
。decimal-places < 0
— 该函数将数字四舍五入到小数点左侧的给定位置。示例:roundBankers(24.55, -1) = 20
。decimal-places = 0
— 该函数将数字四舍五入为整数。在这种情况下,参数可以省略。示例:roundBankers(2.5) = 2
。
返回值
通过银行家的舍入方法四舍五入的值。
例子
SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10 Query id: 29a3a027-7899-4d08-9a52-9de5af0e75d8 ┌───x─┬─b─┐ │ 0 │ 0 │ │ 0.5 │ 0 │ │ 1 │ 1 │ │ 1.5 │ 2 │ │ 2 │ 2 │ │ 2.5 │ 2 │ │ 3 │ 3 │ │ 3.5 │ 4 │ │ 4 │ 4 │ │ 4.5 │ 4 │ └─────┴───┘
roundBankers(0.4) = 0 roundBankers(-3.5) = -4 roundBankers(4.5) = 4 roundBankers(3.55, 1) = 3.6 roundBankers(3.65, 1) = 3.6 roundBankers(10.35, 1) = 10.4 roundBankers(10.755, 2) = 10.76
--6.其他round类方法
接收一个数字。如果数字小于一,则返回 0。否则,将数字向下舍入到最接近的(整个非负数)二的次数。
接收一个数字。如果数字小于 1,则返回 0。否则,将数字向下舍入为集合中的数字:1、10、30、60、120、180、240、300、600、1200、1800、3600、7200 , 18000, 36000。
接收一个数字。如果数字小于 18,则返回 0。否则,将数字向下舍入为集合中的一个数字:18、25、35、45、55。
接收一个数字并将其向下舍入为指定数组中的一个元素。如果该值小于最低界限,则返回最低界限
例子
SELECT roundToExp2(-355), roundDuration(7999), roundAge(78), roundDown(3555, [455, 67899]) Query id: 5ec2c5db-463e-490f-9fd9-63513600c200 ┌─roundToExp2(-355)─┬─roundDuration(7999)─┬─roundAge(78)─┬─roundDown(3555, [455, 67899])─┐ │ 0 │ 7200 │ 55 │ 455 │ └───────────────────┴─────────────────────┴──────────────┴───────────────────────────────┘