十一、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 │
└───────────────────┴─────────────────────┴──────────────┴───────────────────────────────┘

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM