В PHP я использовал логи c, чтобы найти цифры в числе, но я получаю вывод по умолчанию, который равен «325» вместо «4» для четырех чисел di git - PullRequest
0 голосов
/ 26 апреля 2020

Вот код ниже, пожалуйста, просмотрите и предоставьте мне решение. Это будет очень полезно

<html>
<head>
<body>
<?php
$x=0;   
$num=1000;
do{
    $x++;
    $num/=10;

}while($num!=0);
echo "$x";

?>  
</body>
</html>

1 Ответ

0 голосов
/ 26 апреля 2020

Ваше пока условие неверно, вы никогда не достигнете 0, ну, конечно, до тех пор, пока ваш float не может быть более точно оценен. Поскольку вы делите число ($num) на 10 и устанавливаете результат на $num на каждой итерации, $num становится все ближе и ближе к нулю. Когда вы делите ненулевое число таким образом, оно становится все ближе и ближе к нулю, но фактически никогда не достигнет 0 ( Вы обнаружили предел бесконечности ). Причина, по которой ваш код не вызывает бесконечности l oop и cra sh, заключается в том, что PHP (и все языки) ограничены тем, насколько маленьким (или большим) из числа может представлять одна переменная. Взгляните на this PHP do c для чисел с плавающей запятой , чтобы узнать больше о значениях с плавающей запятой и их возможной точности. Как только значение $num станет достаточно маленьким, PHP больше не сможет точно представлять значение, ведущее к 0. Что, как вы обнаружили, занимает 325 итераций при запуске с 1000.

Вместо этого вам следует проверить, когда ваш $num становится меньше 1.

Пример:

<?php
$x = 0;   
$num = 1000;
do {
    $x++;
    $num /= 10;
} while($num >= 1);

echo $x;

Пример в реальном времени

Использование исходного условия

Вы можете использовать свое исходное условие в то время как $num != 0, если вы измените свой расчет на округление $num вниз до ближайшего целого числа. Например:

<?php
$x = 0;   
$num = 1000;
do {
    $x++;
    $num = floor($num / 10);
} while($num != 0);

echo $x;

Пример Live

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...