MySQL, как сохранить точность при использовании деления?

Допустим, у нас есть значения, которые мы получили в таблицах, эти значения являются строками, поэтому их можно разделить. У нас есть отчет такого типа, но мне не нравится обрабатывать его через язык программирования, но все же нужно выполнить его с помощью запроса 1 sql для получения всех отчетов.

Чтобы сделать запрос коротким для запроса здесь, взгляните на простой простой запрос mysql.

select "68078004281240001301" / "1000000000000000000" from {a dummy table};

Выше возвращает значение 68.07800428124и мы теряем 0001301 в десятичной запятой.

Уже пробовал FORMAT() или же ROUND() еще не работает, или я пропустил некоторые функции MySQL?


Но при использовании bcmath в PHP, мы могли бы сделать это так

$n = '68078004281240001301';
$d = '1000000000000000000';
bcdiv($n, $d, strlen($d) - 1);

и значение выше даст нам точную точность, которую мы хотим 68.078004281240001301


Пожалуйста, помните, что я собираюсь использовать это для отчетов вместе с фильтрами позже.

0

Решение

Я предполагаю, что трудность заключается в том, что, поскольку вы разделяете две строки — которые на самом деле являются целыми числами, он не знает тип используемых значений (как в точности). Если вместо этого вы приведете значения к десятичный тип, Вы можете заставить его работать с любой точностью (до 65 цифр) …

select "68078004281240001301" / "1000000000000000000", cast("68078004281240001301" as decimal(60,30))/ cast("1000000000000000000" as decimal(60,30))

дает …

"68078004281240001301" / "1000000000000000000"68.07800428124

cast("68078004281240001301" as decimal(60,30))/ cast("1000000000000000000" as decimal(60,30))
68.078004281240001301000000000000
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector