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 не всегда идет вверх ...? Что не так с моим запросом? Спасибо

-2
Sandra Murdianto 10 Фев 2020 в 05:39

2 ответа

Лучший ответ

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

2
Bob Jarvis - Reinstate Monica 10 Фев 2020 в 03:07

После разъяснения ниже, это должен быть ваш ответ: 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
0
Mech 10 Фев 2020 в 03:33