2010-04-24 3 views
0

Я хочу, чтобы округлить число до определенного числа значащих цифр - в основном я хочу следующую функцию:PHP - Почему мои вычисления производят другой результат, когда я назначаю его переменной?

round(12345.67, 2) -> 12000 
round(8888, 3) -> 8890 

У меня есть следующий, но есть странная проблема.

function round_to_sf($number, $sf) 
{ 
$mostsigplace = floor(log10(abs($number)))+1; 
$num = $number/pow(10, ($mostsigplace-$sf)); 

echo ($number/pow(10, ($mostsigplace-$sf))).' '.$num.'<BR>'; 
} 

round_to_sf(41918.522, 1); 

Производит следующий вывод:

4.1918522 -0 

Как результат вычислений может отличаться, когда он присваивается переменной?

+0

Возможно, вы не используете код, который считаете себя. Когда я запускаю код выше, я вижу: «4.1918522 4.1918522
» – MtnViewMark

+0

Я не знаю, является ли это актуальным, но функция round_to_sf, кажется, принимает 3 аргумента, но вызов функции, кажется, вызывает только с двумя параметрами ... Может быть, im wrong :( –

+0

Я получаю> Предупреждение: Отсутствует аргумент 3 для round_to_sf(), вызывается в C: \ xampp \ htdocs \ code \ playground \ test.php в строке 10 и определен в C: \ xampp \ htdocs \ code \ детская площадка \ test.php on line 2 4.1918522 4.1918522
dkinzer

ответ

1

Используя метод двоичного поиска для отладки, я сузил это.

Очевидно, что следующая строка, в другой функции, в совершенно другом файле, является проблемой.

$diff = date_diff(new DateTime($lastdate), new DateTime("NOW")); 

Если я прокомментирую это, я получаю правильный результат от моей функции округления.

Может ли кто-нибудь сказать мне, что это ... происходит здесь? Это заставило меня вырвать мои волосы на день. Это также вызвало другие ошибки, которые выглядели как воспоминания о топах - я бы выполнил расчет, который должен был создать float foo, а foo будет использоваться в других вычислениях, которые дали правильный результат, но для эха foo будет отображаться A.KIPGGGGGGGGG.

Смежные вопросы