十一、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.34312.34312.34312.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─┐
│   00 │
│ 0.50 │
│   11 │
│ 1.52 │
│   22 │
│ 2.52 │
│   33 │
│ 3.54 │
│   44 │
│ 4.54 │
└─────┴───┘
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类方法

  roundToExp2(num )

  接收一个数字。如果数字小于一,则返回 0。否则,将数字向下舍入到最接近的(整个非负数)二的次数。

  roundDuration(num )

  接收一个数字。如果数字小于 1,则返回 0。否则,将数字向下舍入为集合中的数字:1、10、30、60、120、180、240、300、600、1200、1800、3600、7200 , 18000, 36000。

  roundAge(num)

  接收一个数字。如果数字小于 18,则返回 0。否则,将数字向下舍入为集合中的一个数字:18、25、35、45、55。

  roundDown (num, arr )

  接收一个数字并将其向下舍入为指定数组中的一个元素。如果该值小于最低界限,则返回最低界限

  例子

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])─┐
│                 0720055455 │
└───────────────────┴─────────────────────┴──────────────┴───────────────────────────────┘

 

 

 

posted @ 2022-01-18 13:42  渐逝的星光  阅读(1949)  评论(0编辑  收藏  举报