TRUNCATE_PRESTO
简介
TRUNCATE_PRESTO
TRUNCATE_PRESTO
函数用于将数值截断到指定的小数位数,直接丢弃多余位数,不进行四舍五入。
与同名的
TRUNCATE
TRUNCATE
函数相比,
TRUNCATE_PRESTO
TRUNCATE_PRESTO
不存在浮点精度问题(
TRUNCATE(3.14159, 2)
TRUNCATE(3.14159, 2)
可能返回
3.14158
3.14158
,而
TRUNCATE_PRESTO(3.14159, 2)
TRUNCATE_PRESTO(3.14159, 2)
始终返回
3.14
3.14
),推荐优先使用
TRUNCATE_PRESTO
TRUNCATE_PRESTO
。
语法
TRUNCATE_PRESTO(x, d)
参数
x
x
:需要截断的数值类型表达式,支持 FLOAT
FLOAT
、DOUBLE
DOUBLE
、DECIMAL
DECIMAL
等数值类型。
d
d
:截断后保留的小数位数,类型为整数。d = 0
d = 0
时截断为整数,d > 0
d > 0
时保留指定位数小数,d < 0
d < 0
时截断到小数点左侧对应位。
返回结果
- 返回截断后的数值,类型与输入的
x
x
相同。
- 截断方式为直接丢弃多余位数,不四舍五入。
- 负数按绝对值截断后保留符号,例如
-3.14159
-3.14159
截断到 2 位小数返回 -3.14
-3.14
。
示例
- 截断正数到 2 位小数:
SELECT TRUNCATE_PRESTO(3.14159, 2);
+-----------------------------+
| truncate_presto(3.14159, 2) |
+-----------------------------+
| 3.14 |
+-----------------------------+
- 截断负数到 2 位小数:
SELECT TRUNCATE_PRESTO(-3.14159, 2);
+------------------------------+
| truncate_presto(-3.14159, 2) |
+------------------------------+
| -3.14 |
+------------------------------+
- 截断为整数(
d = 0
d = 0
):
SELECT TRUNCATE_PRESTO(9.99, 0);
+--------------------------+
| truncate_presto(9.99, 0) |
+--------------------------+
| 9 |
+--------------------------+
- 截断到小数点左侧(
d < 0
d < 0
):
SELECT TRUNCATE_PRESTO(314.159, -2);
+------------------------------+
| truncate_presto(314.159, -2) |
+------------------------------+
| 300 |
+------------------------------+
- 与
TRUNCATE
TRUNCATE
的精度对比:
SELECT TRUNCATE(3.14159, 2), TRUNCATE_PRESTO(3.14159, 2);
+----------------------+-----------------------------+
| truncate(3.14159, 2) | truncate_presto(3.14159, 2) |
+----------------------+-----------------------------+
| 3.14158 | 3.14 |
+----------------------+-----------------------------+
注意事项
TRUNCATE_PRESTO
TRUNCATE_PRESTO
只截断,不四舍五入。TRUNCATE_PRESTO(3.999, 2)
TRUNCATE_PRESTO(3.999, 2)
返回 3.99
3.99
,不是 4.00
4.00
。
- 当
TRUNCATE
TRUNCATE
出现浮点精度异常(如返回 3.14158
3.14158
而非 3.14
3.14
)时,改用 TRUNCATE_PRESTO
TRUNCATE_PRESTO
。
- 需要四舍五入时请使用
ROUND
ROUND
函数。
相关文档