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
Пожалуйста, помните, что я собираюсь использовать это для отчетов вместе с фильтрами позже.
1 ответ
Я предполагаю, что трудность заключается в том, что, поскольку вы разделяете две строки - которые на самом деле являются целыми числами, он не знает тип используемых значений (как в точности). Если вместо этого вы приведете значения к десятичному типу, вы можете заставить его работать с любой точностью (до 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