MySQL - Как я могу всегда округлять десятичные дроби? - PullRequest
14 голосов
/ 09 октября 2011

Например, у меня есть следующее значение:

0.000018

Это 6 десятичных знаков, но я хочу округлить его до ближайшего целого 4-го знака после запятой, так что:

0.000018 -> 0.0001

Я играл с функцией раунда (), но если бы я просто использовал функцию раунда:

round(0.000018,4) = 0.0000

При игрес десятичными разрядами для финансовых целей, в этом случае нужно округлить и выставить счет клиенту вместо того, чтобы дать ему халяву!Но round() будет округляться вверх или вниз в зависимости от значения, мне нужно последовательно округлять вверх.

Есть ли простой способ сделать это?

Ответы [ 3 ]

29 голосов
/ 09 октября 2011

Вы можете использовать ceil (потолок) .Он только округляется, так что вам нужно умножить на 10000, сделать ceil, а затем снова разделить результат.

Итак ceil(0.000145* 10000) = ceil(1.45) = 2 Разделите обратно, и вы получите 0.0002

РЕДАКТИРОВАТЬ: подожди, что?это не работаетЯ имею в виду FLOOR очевидно, но работа та же самая: D Руководство тоже на той же странице:)

Итак floor(0.000145* 10000) = floor(1.45) = 1 Разделите назад, и вы получите 0.0001

2 голосов
/ 08 января 2016

Существует еще один метод, который заключается в добавлении половины, кратного 10. Например: round(x+0.005, 2), где x равно 0,923 = 0,93, что уменьшает максимальную ошибку деления с плавающей запятой.

2 голосов
/ 09 октября 2011

Используйте ROUND(X,D), округляя значение от X до D десятичных разрядов.

...