根据mysql中的第三个十进制值向下舍入到最接近的两个十进制值
我需要根据第三个小数点的值向上或向下取整到最接近的两个小数点。如果第三个小数点大于4,则四舍五入。如果小于或等于4,则向下取整 下面的SQL将获得第三个十进制值的值,我可以对其进行四舍五入,但floor函数似乎无法满足四舍五入到最接近的两位小数的要求根据mysql中的第三个十进制值向下舍入到最接近的两个十进制值,mysql,sql,select,rounding,Mysql,Sql,Select,Rounding,我需要根据第三个小数点的值向上或向下取整到最接近的两个小数点。如果第三个小数点大于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 ma
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
请记住,SQL用于存储和检索关系数据,而不是其他很多功能。函数在实现结果时是否过于直接?如果第三个小数点大于4,则四舍五入。四舍五入如果小于或等于4 1.114和1.1149,是否都应返回1.11?还是1.11400000001应该返回1.12?为什么
round(main,2)
不返回期望的结果?我已经对期望的结果进行了编辑,但是round函数不会做完全相同的事情吗?@Bisouxround
根据所需精度后的数字,为您决定是向上还是向下取整。由于要根据div
的值控制舍入是向上还是向下,因此需要使用ceil
和floor
。在这种情况下,ceil和floor函数返回四位小数的结果。在这种情况下,将round函数应用于天花板和地板不应该影响结果,对吗?我使用了truncate函数而不是round函数