Привет, пишу я значит код: если корень из числа извлекается - то извлекать, а если не извлекать - писать перед ним знак корня. Значит вот как у меня это написано: PHP: $D4 = 144; $DK4 = sqrt($D4); if (!is_int($DK4)) { echo "√".$D4; } else { echo $DK4; } Как известно, корень из 144 = 12. А 12 - целое число. Следовательно он должен написать мне не √144, а 12. НО он пишет √144, и так кстати с любыми числами. В чем моя ошибка? Может я неправильно понял предназначение is_int() ?
а где логика то, он мне выводит √12.. --- Добавлено --- Насколько я перевожу этот код - если корень из 144 НЕ ЦЕЛОЕ - выводить √144 , иначе выводить 12.
А кто вам сказал, что число 12.00000 целое с точки зрения машины? Обычное вещественное число. Перепиши так, к примеру: Код (PHP): <?php $D4 = 144; $DK4 = sqrt($D4); if ($D4 != (int) $D4) { echo "√".$D4; } else { echo $DK4; } ?>
Если 144 не равно integer от 144, может что-то добавить сюда надо? Ибо протестировав код, я увидел что ничего не поменялось..
Код работает к сожалению не так как нужно!!! Да, он извлекает корень из числа, НО он извлекает его из любого числа даже из того, из которого корень не извлекается, с таким же успехом я мог бы просто применить функцию sqrt() Чего я хочу добиться от своего кода: Если дано число, корень из которого извлекается - извлекаем. Если дано число, корень из которого не извлекается - не извлекаем, а пишем знак радикала + подкоренное выражение. Я думал задумка ясна.
Результатом извлечения корня всегда будет float число https://php.ru/manual/function.sqrt.html Поэтому проверка is_int и иже с ними не сработает. Можно, как вариант, поступить так: умножить полученный результат на 100-1xxx (какова нужна точность) и целое число результата на это же число (100 ... ) а затем вычесть одно из другого. Если получаем 0 - значит корень .... ну или очень близкое число, зависит от точности ... Надеюсь понятно объяснил Код (Text): $res = sqrt(x); $var_int = (int)$res * 1000000; $var_flt = $res*1000000; if( ($var_flt - $var_int) == 0 ) целое число else не целое Кстати, вот только что пришло в голову, как второй вариант, это результат возвести в степень2 и сравнить с исходным числом. Если результат извлечения корня не целое число вы никогда не получите исходное число. Другое дело, что отличаться они будут также довольно "далеко". Например: корень из 10 = 3,1623 ... 3,1623*3,1623=10,0001
Найдите разницу между результатом и целой частью результата. То есть величину дробной части. Если эта разница (по модулю) не больше заранее заданной точности, скажем 0.001, то считаем что получили целочисленный результат.
Чуток опечатался. Могли бы и заметить, если бы вникали в то, что предлагают, а не просто так запускали. Код (PHP): <?php $D4 = 144; $DK4 = sqrt($D4); if ($DK4 != (int)($DK4)) { echo "√".$D4; } else { echo $DK4; } ?> То, что @artoodetoo и @sevskeef предлагают - вариант точнее, конечно, но вроде и этот работает
Ты написал "если получаем 0". А я написал "не больше заранее заданной точности, скажем 0.001". It makes sense
я вникаю как бы,я писал даже по этому поводу в эту тему вам, но сообщение походу удалилось.. не суть . Спасибо. --- Добавлено --- Всем спасибо! Получилось. Способ mkramer помог. Тему можно считать закрытой