1. PHP / Говнокод #684

    +139.9

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    function num_digits($number)
    {
         $rest = floor($number / 10);
         $i = 1;
         while ($rest >= 1) {
              $rest = floor($rest / 10);
              $i++;
         }
         return $i;
    }

    Взято с http://www.egoholic.ru/2009/03/php.html, что за бред?

    Запостил: guest, 08 Марта 2009

    Комментарии (15) RSS

    • Mironor:
      банальный поиск количества цифр в цифре...

      Сам когда-то так делал (а может и щас бы так поступил, хотя length ом вроде проще...)
      Ответить
    • настоящие крутые пацаны делают это переводом в строку, лол.
      Сравнивать с границами диапазонов это пиздец не по пацански конечно же.
      Ответить
    • egoholic:
      Не думал, что мой код заговнокодят =)

      Не пойму, почему код не приемлем?

      Mironor, цифра - это символ, число - это значение, не путайте=) Функция определяет кол-во разрядов(цифр) в числе.
      Ответить
    • Mironor:
      Мухаха, бросай курить, ты на пхп... ; )

      [code=php]
      $num = 11111;
      echo strlen($num);// выводит 5
      [/php]
      Ответить
    • egoholic:
      суть была показать новичкам в PHP, как писать собственные функции. Думаю, так будет понятнее, почему я не использовал стандартные функции. На http://www.egoholic.ru/2009/03/php.html все описано =)
      Ответить
    • Mironor:
      2Egoholic: Ну, пост выше был адресован не совсем вам ; )
      Если предствавить что пользователь вашего сайта выбрал пхп как свой первый язык, то ваша статья будет ему очень кстати...

      (И что за метод сравнения диапазонов? О_о)
      Ответить
    • egoholic:
      И сам не пойму, что это за метод такой=)))
      Ответить
    • а как насчет чисел с плавоющей точкой?

      <?php
      $number = 10.44;
      function num_digits($number)
      {
           $rest = floor($number / 10);
           $i = 1;
           while ($rest >= 1) {
                $rest = floor($rest / 10);
                $i++;
           }
           return $i;
      }
      //--------------------------------
      function num_digits_2($number)
      {
      	return strlen($number);
      }
      //--------------------------------
      print num_digits($number);
      print "\n";
      print num_digits_2($number);
      print "\n";
      print strlen($number);
      ?>
      Ответить
    • И как можно вообще определить число разрядов у числа с плавающей точкой?
      Определяем для десятиричной системы счисления, а храним в двоичной. В курсе, что, например, 1.3 непредставимо в двоичной, как и 1/3 в десятичной? И сколько там знаков?
      Ответить
    • [quote=Говногость]
      а как насчет чисел с плавоющей точкой?
      [/quote]

      Код читает только количество целых разрядов. Для чисел с плавающей точкой код делающий тоже самое:

      floor($number);
      echo strlen($number);// выводит
      Ответить
    • То есть

      $number = floor($number);
      Ответить
    • egoholic:
      не думал что по такой простой функции возникнет так много комментариев.
      Ответить
    • Mironor:
      Жизнь полна неожидонностей ; )

      Если не морочить себе голову с умножением на 10 до тех пор пока чисел после точки уже не останется, то числа с плавающей точкой переводятся в прилежащий вид и трансформируются в строку...
      Ответить
    • ядщи:
      а для
      echo floor("-10");
      что выведет?
      это будет правдой?
      Ответить
    • хуйкен:
      а через логарифм не быстрее?
      Ответить

    Добавить комментарий