四舍五入的MySQL 0.5并不总是上升

时间:2020-02-10 02:39:11

标签: mysql sql database rounding

https://i.stack.imgur.com/pxEQW.png

CREATE TABLE `zz` (
  `jum_r` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `zz` VALUES (71045),(31875),(12045),(172125),(27325),(5465);


SELECT 
  jum_r, 
  ROUND(ROUND((jum_r * 1.1), 2), 2) as q_gross,
    ROUND(jum_r * 1.1) as gross,
    ROUND((jum_r * 10 / 100), 2) as q_ppn,
    ROUND(jum_r * 10 / 100) as ppn
FROM zz;

根据图片,我有数据。为什么四舍五入不总是增加...?我的查询出了什么问题?谢谢

2 个答案:

答案 0 :(得分:2)

对于精确度的数字(例如DECIMAL),MySQL将0.5舍入到下一个最大整数。对于不精确的数字(例如FLOAT),MySQL依靠底层C库的舍入,这通常是“四舍五入”。 Doc ref here

答案 1 :(得分:0)

在做出以下澄清后,这应该是您的答案: 案例将有所帮助。基本上:

WHEN (ROUND(jum_r * 1.1) < 0.5) THEN FLOOR(ROUND(jum_r * 1.1)), WHEN (ROUND(jum_r * 1.1) >= 0.5 THEN CEILING(ROUND(jum_r * 1.1)). Not pretty but should work