Допустим, у нас есть значения, которые мы извлекли в таблицах, эти значения являются строками, поэтому их можно разделить. У нас есть такой отчет, но мне не нравится обрабатывать его через язык программирования, но я еще не запускал его через 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
daison12006013 21 Июн 2018 в 08:35

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
1
Nigel Ren 21 Июн 2018 в 06:13