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