|
|
|
| Здравствуйте. Нужно просто обрубить число до сотых. То есть 1.99999 => 1.99
Стандартной функции не нашел, подскажите, пожалуйста... | |
|
|
|
|
|
|
|
для: gumplen
(04.02.2011 в 14:01)
| | Можно воспользоваться регулярными выражениями
<?php
$number = 1.99999;
$pattern = "|(\d+)\.(\d+)|e";
$replace = "'\$1.'.substr('\$2', 0, 2)";
$number = preg_replace($pattern, $replace, $number);
echo $number;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 14:13)
| | Спасибо, так и поступлю | |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 14:13)
| | А sprintf не проще? | |
|
|
|
|
|
|
|
для: SHAman
(04.02.2011 в 14:19)
| | А sprintf(), как и number_format() до 2.00 округляют (у меня покрайней мере - сам подивился).
<?php
$number = 1.99999;
echo sprintf("%01.2f", $number); // 2.00
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 14:13)
| |
- Оу, извиняюсь, не заметил, что регулярка. | |
|
|
|
|
|
|
|
для: Gubichev
(04.02.2011 в 16:30)
| | Собственно хорошо бы решение без регулярного выражения - чем меньше хитрого и запутанного кода, тем лучше... но round() не подходит - он округлит, а нужно отсечь цифры без округления. | |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 16:43)
| | >Собственно хорошо бы решение без регулярного выражения - чем меньше хитрого и запутанного кода, тем лучше... но round() не подходит - он округлит, а нужно отсечь цифры без округления.
$number = 1231.3299;
echo substr($number, 0, strpos($number,".")+3);
|
=] | |
|
|
|
|
|
|
|
для: Igorek
(04.02.2011 в 16:51)
| | Тоже думал на счет решения при помощи строковых функций, но мне сейчас ими думать тяжелее, чем регулярными выражениями :))) Когда уже решено, выглядит не так ужасно, как это рисовало воображение :))). | |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 16:43)
| |
$num = 1.9999;
echo trim(substr(sprintf("%12.4f", $num), 0, 10));
|
Пока что это единственное решение из приводившихся в треде, которое не требует явного наличия десятичной точки (и дробной части) в аргументе. | |
|
|
|
|
|
|
|
для: Trianon
(05.02.2011 в 13:25)
| |
<?
$num = 1.9999;
preg_replace("/(\d+\.{0,1}(\d{0,2}))\d*/","$1",$num);
?>
|
Тоже без разницы, целое число или дробное. | |
|
|
|
|
|
|
|
для: Deed
(05.02.2011 в 13:49)
| | Решение хорошее, спору нет. Просто в этой ветке речь зашла о том, как бы компактно решить задачу в рамках строковых функций PHP. Регулярные выражения - это специализированный язык, и не все PHP-разработчики им владеют, а строковыми функциями владеют все и в командной разрботке они более предпочтительны (ну если, конечно, это не нагромождение из десятков строк, вместо одного регулярного выражения). | |
|
|
|
|
|
|
|
для: cheops
(05.02.2011 в 16:17)
| | Что ж то за "разработчики" такие???
Ведь гораздо легче запомнить базовый синтаксис регулярок, чем гору строковых функций!
Лично я, после прочтения такого вот:
полез за справочником... | |
|
|
|
|
|
|
|
для: gumplen
(04.02.2011 в 14:01)
| |
<?
$dig=2.8956747;
$dig2=preg_replace("/(\d+\.(\d{2}))\d*/","$1",$dig);
echo "Original digit is $dig<br />Offcut is $dig2"
?>
|
| |
|
|
|