Есть вот такой цикл, с таким условием.
Я не понимаю, почему условие не срабатывает
for($x = 0.8; $x <= 2.1; $x += 0.1)
{
if($x == 1.2)
echo(123);
}
При это вот такое условие:
if($x > 1.3)
echo(123);
Срабатывает, когда $x равен 1.3.
Либо я туплю по страшному, либо...
Пролейте свет!
Спасибо!
Спустя 34 минуты (25.10.2010 - 14:36) silius написал(а):
Правильней будет так:
for($x = 0.8; $x <= 2.1; $x += 0.1)
{
if((string)$x == 1.2)
echo 123;
}
Спустя 3 минуты, 59 секунд (25.10.2010 - 14:40) ApuktaChehov написал(а):
Почему?
Спустя 8 минут, 17 секунд (25.10.2010 - 14:48) Michael написал(а):
все дело в этих жутких погрешностях php при работе с вещественными числами.
Типа вместо 1.2 на самом деле в php это 1.200002290232931 и уже сравнение не прокатит. Посмотри с точностью приведение.
Типа вместо 1.2 на самом деле в php это 1.200002290232931 и уже сравнение не прокатит. Посмотри с точностью приведение.
Спустя 26 секунд (25.10.2010 - 14:48) linker написал(а):
Правильнее наверное будет использовать bcmath.
Спустя 5 минут, 37 секунд (25.10.2010 - 14:54) iehbr3333 написал(а):
for($x = 0.8; $x <= 2.1; $x=$x+.1)
{
echo " ", number_format($x, 100);
}
Посмотри что выводит в таком случае.
Спустя 7 минут, 31 секунда (25.10.2010 - 15:01) linker написал(а):
Осторожно предложу как вариант
for($x = 0.8; bccomp($x, 2.1, 1) <= 0; $x += 0.1)P.S. Или так
{
if (bccomp($x, 1.2, 1) == 0) echo "123";
}
for($x = 0.8; bccomp($x, 2.1, 1) <= 0; $x += 0.1)
{
if ((string)$x == 1.2) echo "123";
}
Спустя 2 минуты, 57 секунд (25.10.2010 - 15:04) ApuktaChehov написал(а):
Все, я понял. Спасибо ребята. Мне больше всего понравилось использовать bcmath.
Сделал вот так:
Сделал вот так:
for($x = 0.8; $x <= 2.1; $x += 0.1)
{
if(bccomp($x, 1.3, 1) == 0)
echo(123);
}
Спустя 6 минут, 41 секунда (25.10.2010 - 15:11) T1grOK написал(а):
Цитата (Michael @ 25.10.2010 - 11:48) |
все дело в этих жутких погрешностях php при работе с вещественными числами. Типа вместо 1.2 на самом деле в php это 1.200002290232931 и уже сравнение не прокатит. Посмотри с точностью приведение. |
Это не совсем так. Вот сегодня наткнулся на статейку. PHP не проводит логические операции, когда сравнивает два числа с плавающей точкой.(журнал "PHPinsite" №18 2006).
Спустя 23 минуты, 30 секунд (25.10.2010 - 15:35) linker написал(а):
ApuktaChehov
А ты глянь на свой цикл, у тебя условие $x <= 2.1, но на деле при $x равным 2.1 такой итерации не будет, цикл остановится после $x = 2.
А ты глянь на свой цикл, у тебя условие $x <= 2.1, но на деле при $x равным 2.1 такой итерации не будет, цикл остановится после $x = 2.
Спустя 47 минут, 50 секунд (25.10.2010 - 16:22) ApuktaChehov написал(а):
Да, я знаю, заметил.
Я понял, почему так происходит. Спасибо
Я понял, почему так происходит. Спасибо
_____________