根据 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
不幸的是,MySQL 的 floor
和 ceil
不像 round
那样采用精确参数。但是您可以通过将值乘以 100、取底,然后再除以模拟此行为:
CASE
WHEN
div1 > 4
THEN CEIL(main * 100.0) / 100.0
ELSE FLOOR(main * 100.0) / 100.0
END
我需要根据第三位小数的值向上或向下舍入到最接近的两位小数。小数点后第三位大于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
不幸的是,MySQL 的 floor
和 ceil
不像 round
那样采用精确参数。但是您可以通过将值乘以 100、取底,然后再除以模拟此行为:
CASE
WHEN
div1 > 4
THEN CEIL(main * 100.0) / 100.0
ELSE FLOOR(main * 100.0) / 100.0
END