(PHP) Количество разрядов в числе

+
Дата: 11.07.2006 16:01:11
<?php
$num = 1111;

$bits = 0;

do 
{
   $bits++; 
}
while(($num = floor($num/10))>0);

echo $bits; // 4
?>
Можно ли определить кол-во разрядов по-другому (без цикла)?
Oracle
Дата: 11.07.2006 16:12:35
str_length

O*R*A*C*L*E
(Don't despair my little fried...)
4m@t!c
Дата: 11.07.2006 16:23:52
2 Oracle
<?
echo strlen(-12.45);
?>
2 +
Возможно велосипед, но вариант:
<?
echo ceil(log10(abs(-12.45)));
?>
----------------------------------------
Артисты не приехали, приехали цыгане
Oracle
Дата: 11.07.2006 16:36:04
4m@t!c
2 Oracle
<?
echo strlen(-12.45);
?>
2 +
Возможно велосипед, но вариант:
<?
echo ceil(log10(abs(-12.45)));
?>
----------------------------------------
Артисты не приехали, приехали цыгане



Господа - надо оговаривать условие. если так то надо
strlen (round(abs(xxx)));
4m@t!c
Дата: 11.07.2006 16:42:42
Причем здесь условия??? Зачем математическую задачу решать строковой функцией?
Проверяйте, прежде чем постить:
<?php
echo strlen (round(abs(9.5)));
?>
----------------------------------------
Артисты не приехали, приехали цыгане
+
Дата: 11.07.2006 16:45:58
Спасибо! Красиво.

P.S. Учим мат. часть. )
Oracle
Дата: 11.07.2006 17:15:39
4m@t!c
Причем здесь условия??? Зачем математическую задачу решать строковой функцией?
Проверяйте, прежде чем постить:
<?php
echo strlen (round(abs(9.5)));
?>
----------------------------------------
Артисты не приехали, приехали цыгане


Должно работать, а зачем выполнять мат операции в пустую, допустим будет число 999999999999999, что для компа проще посчитать скольо символов, или выполянть ряд мат операций...
4m@t!c
Дата: 11.07.2006 17:44:22
автор
Должно работать

Кому должно? Вам? Мне? А, ведь, не работает. потому что round(9.5) вернет 2. Тогда уже floor(9.5).
автор
что для компа проще посчитать скольо символов, или выполянть ряд мат операций...

А давайте спросим????
<TABLE border="1">
   <TR align="center">
      <TD><B>№ п/п</B></TD>
      <TD><B>log10</B></TD>
      <TD><B>strlen</B></TD>
   </TR>
<?php
function micro_t()
{
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}
$tab = array();
define('UPTO', 10);
define('CIRCLE', 20);
for ($k = 0; $k < CIRCLE; $k++) 
{
   /**
    * foreach
    */
   $t_start = micro_t();
   for ($j = 0; $j < UPTO; $j++)
   {
      log10(micro_t());
   }
   $tab[0][$k] = micro_t() - $t_start; 
   /**************************************
    * strlen
    */
   $t_start = micro_t(); 
   for ($j = 0; $j < UPTO; $j++)
   {
      strlen(micro_t());
   }
   $tab[1][$k] = micro_t() - $t_start; 
   ?> 
      <TR> 
         <TD><?php echo $k+1;?></TD>
         <TD><?php echo $tab[0][$k];?></TD> 
         <TD><?php echo $tab[1][$k];?></TD> 
      </TR> 
   <?php 
   flush(); 
}
?>
      <TR> 
         <TD>AVG</TD>
         <TD><?php echo array_sum($tab[0])/CIRCLE;?></TD> 
         <TD><?php echo array_sum($tab[1])/CIRCLE;?></TD> 
      </TR> 
</TABLE>
№ п/пlog10strlen
10.000286102294921880.00051999092102051
20.000270128250122070.00032782554626465
30.000277042388916020.00032782554626465
40.00599408149719240.00034308433532715
50.000262022018432620.0003199577331543
60.00027394294738770.00032305717468262
70.000557899475097660.00032806396484375
80.000257015228271480.00034809112548828
90.000260829925537110.00052499771118164
100.000257968902587890.00031805038452148
110.000295877456665040.00041794776916504
120.00025892257690430.0057840347290039
130.000268936157226560.00044393539428711
140.000262975692749020.00037288665771484
150.000257015228271480.00031399726867676
160.00032091140747070.00039505958557129
170.000336885452270510.00040006637573242
180.00032019615173340.00032591819763184
190.000298023223876950.00044107437133789
200.000435829162597660.00037407875061035
AVG0.000587630271911620.00064749717712402

Надеюсь, что это будет самое узкое место в вашем коде. Другой вопрос, что интервал у функции log10 - величина конечная. Но это уже другая история, тогда ни floor(), ни ceil() не решат задачу.
Еще раз говорю, что не надо решать подобные математические задачи строковыми функциями.
----------------------------------------
Артисты не приехали, приехали цыгане
Berkut
Дата: 12.07.2006 10:42:46
ОФФ

2 4m@t!c

Немного другой вариант функции micro_t():
function micro_t()
{
   return array_sum(explode(' ', microtime()));
}

P.S. Думаю, что понравится. ;)
*
Дата: 12.07.2006 12:41:08
Может кто нибудь уже заткнёт этого идиота? Один топик с его подачки уже закрыли. Нахрена лезть отвечать в топики, если в вопросе плаваешь?