Как избежать округления?

  • Автор темы Автор темы mike
  • Дата начала Дата начала

mike

pmcoder
Как избежать округления?

PHP:
echo sprintf("%01.3f", 0.00990099009901);

выдает 0,010.

Что можно сделать, чтобы результат был
0,009
 
Tor
Мне не надо округлять, совсем наоборот
Я почему-то думал, что имею дело в форматированым выводом. Если не секрет при чем здесь арифметика?
echo sprintf("%01.3f", 0.009);
выдает то что нужно.
echo round(0.00990099009901,3);
тоже выдает 0,010
 
И все - таки арифметика :)
PHP:
$dig=3 ; // 3 digit after point
$num=0.00990099009901; 
echo sprintf("%01.".$dig."f", 0.00990099009901 -(5/pow(10,1+$dig)));

-~{}~ 08.09.05 18:51:

Он делает round сам... :(
 
Мутник
Кстати, тоже вариант, но, тогда уж preg_replace :)
 
Спасибо за внимание. Вариант, который привел ForJest
мне больше всего понравился.
 
а вариант, которой привёл Мутник, в два раза проще.
но поскольку он не привёл готовый код, а только название функции, и надо самому лезть в ман, читать и писать, то, конечно же, больше подошёл вариант ForJest
кто бы сомневался.
 
Фанат
Чем проще регулярные выражения за 3 арифметические операции?
PHP:
function digit($value,$dig){
  return  (int)($value*pow(10,$dig))/pow(10,$dig);
}

function digit($value,$dig){
  return preg_replace("/(\d+)(\.)([\d]{".$dig."})(\d+)/","$1$2$3",$value);
}
Я все таки думаю, что в данном контексте лучше использовать первый вариант. Кроме того время выполнения первого варианта как минимум на порядок меньше второго.
 
при чём здесь регулярные выражения?
если целая часть может быть любой, то да, математикой бысрее.
если же исходить из условий задачи, как она была поставлена, то строками быстрее
 
Фанат, извини не не туда посмотрел
при чём здесь регулярные выражения?
Но все равно вариант со строкой работает тоже на порядок медленней, чем математика.
PHP:
function digit($value,$dig){
  return substr($value,0,$dig+2);
}
Но в любом случае спасибо за проявленное внимание.
 
Сверху