математика — php арифметические ошибки — по модулю

Я использую PHP 5.5 (5.5.28)
Я столкнулся с действительно странной проблемой с арифметикой PHP

$value=29; $divisor=10;
$mod=$value%$divisor;
echo "$mod<br>";

возвращает 9 (как и ожидалось)

$value=(0.29*100); $divisor=(0.1*100);
$mod=$value%$divisor;
echo "$mod<br>";

возвращает 8 (????)

Я не могу найти ничего об этом в документации
Очевидно, что относительно легко написать функцию замены и использовать ее
Тем не менее, проблема, кажется, больше, в том, что я получаю странные ошибки округления, которые означают, что записи моей книги в проекте, над которым я работаю, не сбалансированы

Какие-либо предложения?

0

Решение

Это почти наверняка связано с тем, как хранятся числа с плавающей запятой, и у вас возникает проблема, при которой .29 * 100 не ТОЧНО равен 29, а 0,1 * 100 не ТОЧНО равен 10. Следовательно, если один немного меньше или больше чем вы ожидали, то вы получите результат, который на один. Если вы напечатаете свои промежуточные значения с десятичным знаком, вы, вероятно, сможете увидеть причину

Это точно та же проблема, что и у вас, когда вы пытаетесь сравнить равенство чисел с плавающей точкой, и вам приходится делать что-то вроде: if (fabs (a-b) < 0,0001), а не говорить: если (а == б)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]