|
|
|
| Подскажите как можно например в 1234567890 обрезать последние два разряда чтобы получить 12345678
заранее спасибо за помощь | |
|
|
|
|
|
|
|
для: serjinio
(17.09.2008 в 03:03)
| | можно сделать так:
<?
$num = 1234567890;
$r = 2; //количество обрезаемых разрядов
$num = floor($num / pow(10, $r));
echo $num;
?>
|
| |
|
|
|
|
|
|
|
для: serjinio
(17.09.2008 в 03:03)
| | А если
<?
$num = 1234567890;
$num = substr($num, 0, -2);
?>
|
рhр сам установливает тип, в зависимости от контекста, в котором используется переменная... | |
|
|
|
|
|
|
|
для: Mehelson
(17.09.2008 в 06:07)
| | >рhр сам установливает тип, в зависимости от контекста, в котором используется переменная...
Да, но операции с числами, гораздо быстрее чем со строками. | |
|
|
|
|
|
|
|
для: Drago
(17.09.2008 в 06:28)
| | всем огромное спасибо за помощь. | |
|
|
|
|
|
|
|
для: Drago
(17.09.2008 в 06:28)
| | В данном случае, мне кажется, выгоды нет. | |
|
|
|
|
|
|
|
для: sim5
(17.09.2008 в 09:18)
| | стало интересно...насколько ?
<?
substr($int, 0, -2);
?>
12345678
за 0.000088 секунд
<?
floor($num/pow(10, $r));
?>
12345678
за 0.000039 секунд
|
даже моргнуть не успел :)
и даже при 1000 итераций до секунды не дотягивает | |
|
|
|
|
|
|
|
для: Mehelson
(17.09.2008 в 10:37)
| | Интересно. :) По идее в первом случае нужно просто взять определенное число байт из памяти. Может быть время уходит на подсчет байтов занятых этой строкой. Плохо, значит указывая строку как переменную, интерпретатор резервирует память не имея указателя на конец данных. Иначе достаточно было указать смещение и все. Ну а то, что математ. сопроцессоры сейчас на очень высоком уровне, это понятно.) | |
|
|
|
|
|
|
|
для: sim5
(17.09.2008 в 10:50)
| | В первом случае сперва придется двоичное число с плавающей точкой преобразовать в текстовое десятичное представление. Это довольно тяжелая операция. | |
|
|
|
|
|
|
|
для: Trianon
(17.09.2008 в 12:56)
| | Видимо так. В РНР ведь не обязательно указывать тип, пусть сам "карячится", вот он и карячится :) | |
|
|
|
|
|
|
|
для: Trianon
(17.09.2008 в 12:56)
| | _ | |
|
|
|
|
|
|
|
для: Trianon
(17.09.2008 в 12:56)
| | у меня такой замер времени показал ощутимую разницу только в случае когда
$int = 12345678
, если объявить так:
$int = '12345678';
, получается не слишком разное время | |
|
|
|
|
|
|
|
для: xx77
(17.09.2008 в 13:25)
| | корректнее сравнивать с floor($num/100)
тогда как?
Кстати, как выгялдит скрипт замера? | |
|
|
|
|
|
|
|
для: Trianon
(17.09.2008 в 13:29)
| | > как выгялдит
выглядит не очень осмысленно,
приходится вручную перетаскивать строку для сравнения )
<?
list($m, $time) = sscanf(microtime(), '0%s %s');
$time .= $m;
<pre><?
$int = '23458765';
for ($i=0; $i < 10000; $i++) floor($int/100);
//
//substr($int, 0, -2);
list($m, $t) = sscanf(microtime(), '0%s %s');
printf("<hr/>%.f7\n", (($t .= $m) - $time)); # время выполнения
?>
|
| |
|
|
|
|
|
|
|
для: xx77
(17.09.2008 в 13:38)
| | неправомерное сравнение.
либо floatval(substr($int, 0, -2));
либо strval(floor($int/100));
Кроме того в теле цикла стоило бы нарисовать штук двадцать таких строк(одинаковых) , чтобы убрать влияние самого пересчета. | |
|
|
|
|
|
|
|
для: xx77
(17.09.2008 в 13:25)
| | Ну у автора всё ж число на входе, а не строка... Хотя кто его знает... | |
|
|
|
|
|
|
|
для: Trianon
(17.09.2008 в 13:31)
| | В частности интересует
$s_f=session_id().mktime();
|
07ce5e4817c983f3a2637fbb76f25fb7122 1645774
|
| |
|
|
|
|
|
|
|
для: serjinio
(17.09.2008 в 15:04)
| | Здесь нет разрядов.
Здесь лишь символы. | |
|
|
|
|
|
|
|
для: xx77
(17.09.2008 в 13:25)
| | разницы не ощутил... как не представляй, хоть числом хоть строкой.
Все одно substr обрабатывает дольше | |
|
|
|