Микроблог

1.43K
.
*Враг общества*
# L!MP (13.02.2014 / 17:11)
Мерял свитер, с оленями, а он оказался мне мал. Так и не купил. Теперь в печали.
Надо было мерить с котятами
.
Sensus veris
# L!MP (13.02.2014 / 17:11)
Мерял свитер, с оленями, а он оказался мне мал. Так и не купил. Теперь в печали.
Фи... Пыталась напялить джинсы, которые носила 4 года назад... В общем, скоро это будет креативная джинсовая подушка
.
Libra, они сели?
.
Sensus veris
# L!MP (13.02.2014 / 22:16)
Libra, они сели?
Нет
.
Гг, я про обручь вспомнил. Большая подушка получится, гг.
.
Sensus veris
# L!MP (13.02.2014 / 22:27)
Гг, я про обручь вспомнил. Большая подушка получится, гг.
Не, ну не настолько ж
.
(\/)____o_O____(\/)
L!MP, а бороду уже отпустил?
.
L!MP
Невероятное рядом.

$a = 15.9;    //=> float 15.9
$b = 5.3 * 3; //=> то же, float 15.9
    
var_dump($a == $b); //=> думаете равно? false
.
web_demon
L!MP, http://www.php.su/learnphp/dat ... float
оттуда цитата:
Довольно часто простые десятичные дроби вроде 0.1 или 0.7 не могут быть преобразованы в свои внутренние двоичные аналоги без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего возвратит 7 вместо ожидаемой 8 как результат внутреннего представления числа, являющегося в действительности чем-то вроде 7.9999999999....

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

Так что никогда не доверяйте точности последних цифр в результатах с числами с плавающей точкой и никогда не проверяйте их на равенство.


Как вариант преобразовывать такие числа в строки, тогда получается все нормально:
var_dump((string)$a == (string)$b);
.
web_demon, Костыльно, если нужна точность, то лучше юзать bcmath
Всего: 79