Округление mysql 0,5 не всегда go вверх - PullRequest
0 голосов
/ 10 февраля 2020

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;

У меня есть данные согласно картинке. Почему округление 0,5 не всегда go вверх ...? Что не так с моим запросом? Спасибо

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Для чисел с точной точностью (например, DECIMAL) MySQL округляет 0,5 до следующего наибольшего целого числа. Для неточных чисел (например, FLOAT) MySQL рассчитывает на округление базовой библиотеки C, которое часто является "округленным до четного". Do c ссылка здесь

0 голосов
/ 10 февраля 2020

После разъяснения ниже, это должен быть ваш ответ: CASE поможет. В основном:

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
...