При вычитании 2-х вещественных чисел получаю число на подобии такого -9.9999999999989E-5

Для одного из наших проектов необходимо было вывести изменения курсов валют по отношению ко вчерашнему дню. Вроде бы совершенно простая операция вида 0.7862-0.7863 выдавала вместо необходимого -0.0001 результат -9.9999999999989E-5. Обновление версии php на сервере никакого результата не дало. При этом на локальном сервере результат был нормальным, а на хостинге кривым. Поиск схожим проблем в интернете не нашёл. Решение оказалось совсем неожиданным. А точнее в применении простого округления round(‘-9.9999999999989E-5’,4). В результате чего я получил то что мне надо.


Еще один пример странного поведения php привел один из пользователей с форума vingrad, Pfailed

$r = 0;
for ($i=0; $i $r += 0.1;
}
echo $r == 1 ? "1 == 1" : "1 != 1", "\n";

Выводит 1 != 1. Если у кого есть обьяснение прошу в комментарии.

 

Поделиться в соц. сетях

Другое из текущей категории:

2 Replies to “При вычитании 2-х вещественных чисел получаю число на подобии такого -9.9999999999989E-5”

    1. Большое спасибо. Очень полезная и информативная статья. Прочитал бы ее когда столкнулся с проблемой, думаю долго не возился бы ))

Добавить комментарий