Intereting Posts
Как отправить JQuery Добавление строк в mysql с помощью PHP Регулярное выражение: найдите элементы, обернутые специальными селекторами Рекомендации по обработке ошибок в базе данных в CodeIgniter Регулярное выражение PHP для извлечения ссылки / кода TwitPic, если присутствует Класс PHP не найден, но он включен Создание нового поля атрибутов в каталоге-> Управление категориями-> Настройки отображения Эффективная перезагрузка данных / передача данных с сервера на клиент php предупреждение при входе в папку веб-сайта cpanel алгоритм для преобразования md5 (или, может быть, другой метод хэширования?) в целое число, где можно установить возможные результирующие целые диапазоны (например: 1-10000)? Исходный параметр Проверьте тип файла (FLV) перед загрузкой файла PHP во временную папку, только прочитав только 3 байта файла Как вы исправляете Nginx автоматически 301 перенаправление на тот же URL с завершающим косой чертой? Как искать изображения по имени внутри папки? Удаление нежелательных заголовков из электронной почты (для безопасности) PHP Eval, который оценивает HTML и PHP

php вычислять float

У меня есть странный математический расчет здесь. Надеюсь, кто-то объяснит.

$a = 1.85/100; $b = 1.5/100; $c = 1.1/100; $d = 0.4/100; $e = 0.4/100; $f = 0.4/100; $g = 0.4/100; $h = $a + $b + $c + $d + $e + $f + $g; echo $h*100 ."<br>"; $i = $h-$a; $i = $i-$b; $i = $i-$c; $i = $i-$d; $i = $i-$e; $i = $i-$f; $i = $i-$g; echo $i; 

Последнее значение $i должно быть 0, но оно возвращает 6.93889390391E-18.

любая идея исправить мое уравнение, чтобы показать конечный результат 0.00?

Да, round($i, 2)

«Расхождения» обычно настолько малы, что округление до двух десятичных знаков почти всегда решит проблему.

Вы должны прочитать эту статью:

Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой

Арифметика с плавающей точкой не является точной. Вы должны ожидать небольшие ошибки. Ответ верен в пределах небольшой ошибки округления. Если вам нужно проверить, является ли число с плавающей точкой нулевым, лучше не проверять, что он точно равен нулю, а вместо этого проверяет, достаточно ли он близок к нулю.

Если вам действительно нужна точная арифметика, не используйте типы с плавающей запятой. В вашем примере вы можете умножить все свои числа на 100 и использовать целочисленную арифметику для получения точного ответа.

В этом нет ничего плохого, просто округлые аппроксимации.

В этом случае вы должны умножить все свои значения на 1000 и сделать разделение в конце вычисления или, лучше, прибегнуть к точному расширению расчёта