【发布时间】:2021-10-03 07:15:26
【问题描述】:
当函数的第二个参数本身是某个函数并且被舍入的值是 DECIMAL 类型时,MySQL ROUND() 函数会正确舍入一个值,但不会截断尾随零。
有人可以解释导致这种行为的原因吗?
下面的查询显示了四种情况:
- 静态回合,按预期工作
- 动态舍入,其中舍入的位数是通过 IF() 评估的,不会截断
- 动态舍入(通过 ROUND() 计算舍入的位数)不会截断
- 动态舍入,其中被舍入的值可以是不同的类型,按预期工作
示例查询:
SELECT
ROUND(val1, 3),
ROUND(val1, IF(val1 < 5, 3, 3)),
ROUND(val1, ROUND(val1)),
ROUND(IFNULL(val1, '--'), IF(val1 < 5, 3, 3)),
val1
FROM table_one;
工作台输出here。 (没有要嵌入的积分,抱歉)
创建包含两个条目的示例表:
CREATE TABLE `table_one` (
`val1` decimal(20,10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO table_one VALUES (6.123423), (3.678903);
【问题讨论】:
标签: mysql decimal rounding truncate