ceil
引入版本:v1.1.0
与 floor 类似,但返回大于或等于 x 的最小舍入值。
如果舍入导致溢出 (例如 ceiling(255, -1)) ,则结果未定义。
语法
ceiling(x[, N])别名: ceiling
参数
返回值
返回与 x 类型相同的舍入结果。Float* 或 Decimal* 或 (U)Int*
示例
基本用法
SELECT ceiling(123.45, 1) AS rounded┌─rounded─┐
│ 123.5 │
└─────────┘负数精度
SELECT ceiling(123.45, -1)┌─ceiling(123.45, -1)─┐
│ 130 │
└─────────────────────┘floor
引入版本:v1.1.0
返回小于或等于 x 的最大舍入值,其中该值是 1 / 10 * N 的倍数;如果 1 / 10 * N 无法精确表示,则返回相应数据类型中最接近的数值。
对于整数参数,可使用负数 N 进行舍入。
当 N 为非负数时,函数返回 x。
如果舍入导致溢出 (例如 floor(-128, -1)) ,则结果未定义。
语法
floor(x[, N])参数
返回值
返回与 x 类型相同的舍入结果。Float* 或 Decimal* 或 (U)Int* 或 (U)Int*
示例
使用示例
SELECT floor(123.45, 1) AS rounded┌─rounded─┐
│ 123.4 │
└─────────┘精度为负
SELECT floor(123.45, -1)┌─floor(123.45, -1)─┐
│ 120 │
└───────────────────┘round
Introduced in: v1.1.0
将一个值舍入到指定的小数位数 N。
- 如果
N > 0,函数会舍入到小数点右侧。 - 如果
N < 0,函数会舍入到小数点左侧。 - 如果
N = 0,函数会舍入为最接近的整数。
该函数返回指定数量级上最接近的数值。
如果输入值与两个相邻数的距离相等,则对于 Float* 输入,函数使用银行家舍入法;对于其他数值类型 (Decimal*) ,则按远离零的方向舍入。
如果舍入导致溢出 (例如 round(255, -1)) ,则结果未定义。
Syntax
round(x[, N])参数
返回值
返回与 x 类型相同的舍入结果。Float* 或 Decimal* 或 (U)Int*
示例
Float 类型输入
SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;┌───x─┬─round(x)─┐
│ 0 │ 0 │
│ 0.5 │ 0 │
│ 1 │ 1 │
└─────┴──────────┘Decimal 类型输入
SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3;┌───x─┬─round(x)─┐
│ 0 │ 0 │
│ 0.5 │ 1 │
│ 1 │ 1 │
└─────┴──────────┘roundAge
引入版本:v1.1.0
接受一个表示人类年龄的数值,将其与标准年龄区间进行比较,并返回该数值所在区间的上限值或下限值。
- 对于
age < 1,返回0。 - 对于
1 ≤ age ≤ 17,返回17。 - 对于
18 ≤ age ≤ 24,返回18。 - 对于
25 ≤ age ≤ 34,返回25。 - 对于
35 ≤ age ≤ 44,返回35。 - 对于
45 ≤ age ≤ 54,返回45。 - 对于
age ≥ 55,返回55。
语法
roundAge(num)参数
返回值
返回 age 所在区间的上限或下限年龄。UInt8
示例
用法示例
SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72);┌─number─┬─roundAge(number)─┐
│ 0 │ 0 │
│ 5 │ 17 │
│ 20 │ 18 │
│ 31 │ 25 │
│ 37 │ 35 │
│ 54 │ 45 │
│ 72 │ 55 │
└────────┴──────────────────┘roundBankers
引入版本:v20.1.0
将数字舍入到指定的小数位 N。
如果待舍入的数字恰好位于两个数的中间,函数会使用一种称为银行家舍入法 (banker's rounding) 的舍入方法,这是 IEEE 754 为浮点数定义的默认舍入方式。
- 如果
N > 0,函数会舍入到小数点右侧 - 如果
N < 0,函数会舍入到小数点左侧 - 如果
N = 0,函数会舍入为最接近的整数
语法
roundBankers(x[, N])参数
返回值
返回按银行家舍入法处理后的值。(U)Int* 或 Decimal* 或 Float*
示例
基本用法
SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10┌───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 │
└─────┴───┘roundDown
引入版本:v20.1.0
将一个数向下舍入到指定数组中的某个元素。 如果该值小于下限,则返回下限。
语法
roundDown(num, arr)参数
num— 要向下舍入的数值。(U)Int*或Decimal*或Float*arr— 用于将num向下舍入到其中某个元素的数组。Array((U)Int*)或Array(Float*)
返回值
返回向下舍入到 arr 中某个元素的数值。如果该值小于最小界限,则返回最小界限。(U)Int* 或 Float*
示例
用法示例
SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5)┌─number─┬─roundDown(number, [3, 4, 5])─┐
│ 0 │ 3 │
│ 1 │ 3 │
│ 2 │ 3 │
│ 3 │ 3 │
│ 4 │ 4 │
│ 5 │ 5 │
└────────┴──────────────────────────────┘roundDuration
引入版本:v1.1.0
将一个数向下舍入到最接近的常用耗时值之一:1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000。
如果该数小于 1,则返回 0。
语法
roundDuration(num)参数
返回值
当 num < 1 时,返回 0。否则,返回以下值之一:1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000。UInt16
示例
用法示例
SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573)┌─number─┬─roundDuration(number)─┐
│ 0 │ 0 │
│ 9 │ 1 │
│ 19 │ 10 │
│ 47 │ 30 │
│ 101 │ 60 │
│ 149 │ 120 │
│ 205 │ 180 │
│ 271 │ 240 │
│ 421 │ 300 │
│ 789 │ 600 │
│ 1423 │ 1200 │
│ 2345 │ 1800 │
│ 4567 │ 3600 │
│ 9876 │ 7200 │
│ 24680 │ 18000 │
│ 42573 │ 36000 │
└────────┴───────────────────────┘roundToExp2
引入版本:v1.1.0
将一个数向下舍入为最接近的 2 的幂 (非负整数) 。
如果该数小于 1,则返回 0。
语法
roundToExp2(num)参数
返回值
返回将 num 向下舍入为最接近的二的 (非负整数) 幂后的结果;如果 num < 1,则返回 0。(U)Int* 或 Float*
示例
用法示例
SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50)┌─number─┬─roundToExp2(number)─┐
│ 0 │ 0 │
│ 2 │ 2 │
│ 5 │ 4 │
│ 10 │ 8 │
│ 19 │ 16 │
│ 50 │ 32 │
└────────┴─────────────────────┘trunc
引入版本:v1.1.0
与 floor 类似,但返回绝对值不大于 x 且绝对值最大的舍入值。
语法
truncate(x[, N])别名: truncate
参数
返回值
返回与 x 类型相同的舍入结果。Float* 或 Decimal* 或 (U)Int*
示例
基本用法
SELECT truncate(123.499, 1) AS res;┌───res─┐
│ 123.4 │
└───────┘