根据 mysql 中的第三个小数值向​​下舍入到最接近的两位小数

Round down to nearest two decimal based on third decimal value in 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',abs(1400/ 3.6735) * power(10,3) % 10 DIV 1 as DIV1 
UNION
select 1200/ 3.6735 AS main,abs(1200/ 3.6735) * power(10,3) % 10 as 'abs%10',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 as 'abs%10',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