问题描述
我需要根据第三位小数的值四舍五入到最接近的两位小数。如果小数点后第三位大于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
解决方法
不幸的是,MySQL的floor
和ceil
并没有像round
这样的精度参数。但是您可以通过将值乘以100,对其进行下限然后再除以来模拟此行为:
CASE
WHEN
div1 > 4
THEN CEIL(main * 100.0) / 100.0
ELSE FLOOR(main * 100.0) / 100.0
END