Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据mysql中的第三个十进制值向下舍入到最接近的两个十进制值_Mysql_Sql_Select_Rounding - Fatal编程技术网

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

根据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

我需要根据第三个小数点的值向上或向下取整到最接近的两个小数点。如果第三个小数点大于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

请记住,SQL用于存储和检索关系数据,而不是其他很多功能。函数在实现结果时是否过于直接?如果第三个小数点大于4,则四舍五入。四舍五入如果小于或等于4 1.114和1.1149,是否都应返回1.11?还是1.11400000001应该返回1.12?为什么
round(main,2)
不返回期望的结果?我已经对期望的结果进行了编辑,但是round函数不会做完全相同的事情吗?@Bisoux
round
根据所需精度后的数字,为您决定是向上还是向下取整。由于要根据
div
的值控制舍入是向上还是向下,因此需要使用
ceil
floor
。在这种情况下,ceil和floor函数返回四位小数的结果。在这种情况下,将round函数应用于天花板和地板不应该影响结果,对吗?我使用了truncate函数而不是round函数