根据mysql中的第三个十进制值舍入到最接近的两位十进制

问题描述

我需要根据第三位小数的值四舍五入到最接近的两位小数。如果小数点后第三位大于4,则四舍五入。如果小数位数小于或等于4,则四舍五入。

下面的SQL将为我提供第三个十进制值的值,并且可以四舍五入,但是floor函数似乎无法满足四舍五入到最接近的两位小数的要求。

SELECT main,DIV1,CASE 
WHEN 
DIV1 > 4
THEN round(main,2)
ELSE
FLOOR(main)
end as result
 FROM (
select 1400/ 3.6735 AS main,abs(1400/ 3.6735) * power(10,3) % 10 as 'abs%10',3) % 10 DIV 1 as DIV1 
UNION
select 1200/ 3.6735 AS main,abs(1200/ 3.6735) * power(10,3) % 10 DIV 1 as DIV1 
UNION
select 9000/ 3.6735 AS main,abs(9000/ 3.6735) * power(10,3) % 10 DIV 1 as DIV1  )T;

以上结果为

main      DIV1    result
381.1079    7      381.11
326.6639    3      326
2449.9796   9      2449.98

所需的结果是

main      DIV1    result   desiredResult
381.1079    7      381.11     381.11
326.6639    3      326        326.66
2449.9796   9      2449.98    2449.98

dbfiddle

解决方法

不幸的是,MySQL的floorceil并没有像round这样的精度参数。但是您可以通过将值乘以100,对其进行下限然后再除以来模拟此行为:

CASE 
WHEN 
div1 > 4
THEN CEIL(main * 100.0) / 100.0
ELSE FLOOR(main * 100.0) / 100.0
END

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...