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