Переменная, вероятно, изначально является строкой в PHP (при чтении из объекта результата MySQL).В общем, на тип данных PHP с плавающей запятой нельзя полагаться для сохранения требуемого точного десятичного значения.Вы должны использовать математическую библиотеку произвольной точности, например GMP .(Когда вы извлекаете строку объекта результата, передайте значение столбца DECIMAL
соответствующему конструктору, а затем работайте с ним, используя функции, предоставляемые библиотекой, которую вы используете.)
Для продолженияв глубину: предположим, что у вас есть сумма, хранящаяся в базе данных, в столбце DECIMAL(6, 4)
.Вы хотите получить это в PHP, чтобы что-то сделать с ним.Вы выдаете запрос для извлечения этого столбца.Вы извлекаете первую строку запроса в ассоциативный массив.Предположим, что значение из этой строки 2.5674
.Ваш массив теперь похож на array('MyDecimal' => '2.5674')
(число отображается в виде строки).Вы используете (насколько я могу судить) gmp_init()
, чтобы преобразовать эту строку в ресурс GMP.Теперь вы можете делать математику с этим числом, используя другие функции GMP.Если вы хотите сохранить номер GMP, вы можете преобразовать его обратно в строку, используя gmp_strval()
(возможно, вам не нужно делать это, если вы используете уровень абстракции базы данных, который может обрабатывать ресурсы GMP).