mysqli_stmt::bind_result для вещественного типа

Panchous

Павел
mysqli_stmt::bind_result для вещественного типа

В таблице товаров есть поле price (FLOAT).
При выводе списка товаров - отображаю цену.
все работает, только получаю значения переменной $price = 2.29999995232 (когда запрос возвращает 2.3)

как быть?

PS:
MySQL4.1, PHP5.0.5
 

tony2001

TeaM PHPClub
Точность числа с плавающей точкой

Довольно часто простые десятичные дроби вроде 0.1 или 0.7 не могут быть преобразованы в свои внутренние двоичные аналоги без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего возвратит 7 вместо ожидаемой 8 как результат внутреннего представления числа, являющегося в действительности чем-то вроде 7.9999999999....

Это связано с невозможностью точно выразить некоторые дроби в десятичной системе счисления конечным числом цифр. Например, 1/3 в десятичной форме принимает вид 0.3333333. . ..

Так что никогда не доверяйте точности последних цифр в результатах с числами с плавающей точкой и никогда не проверяйте их на равенство. Если вам действительно необходима высокая точность, вам следует использовать математические функции произвольной точности или gmp-функции.
[m]float[/m]
 
Сверху