Количество десятичных знаков по умолчанию для вывода в PHP

Я работаю с php в своем ящике разработчика дома, где у меня есть элементарная установка LAMP. Когда я просматриваю свой веб-сайт на своем домашнем ящике, любые числа, которые я повторяю, автоматически усекаются до минимально необходимой точности. Например, 2 отображается как 2, 2.2000 отображается как 2.2.

В производственной коробке все числа повторяются как минимум с одним ненужным нулем, например, 100 становится 100,0. На обоих боксах версия PHP 5.2.5. Кто-нибудь знает навскидку, есть ли параметр, который я могу изменить, который заставит PHP автоматически удалять все ненужные нули? Я не хочу переходить к каждому месту в своем коде, где я вывожу число и заменяю эхо на printf или что-то в этом роде.

Большое спасибо.


person el_champo    schedule 10.12.2008    source источник


Ответы (6)


И когда вы не можете полагаться на конфигурацию PHP, не забывайте о number_format(), который можно использовать для определения способа возврата числа, например:

// displays 3.14 as 3 and 4.00 as 4    
print number_format($price, 0); 
// display 4 as 4.00 and 1234.56 as 1,234.56 aka money style
print number_format($int, 2, ".", ","); 

PS: и старайтесь избегать использования money_format(), так как он не будет работать в Windows и некоторых других системах.

person TravisO    schedule 10.12.2008

Беглый просмотр доступных настроек INI заставляет меня precision отличаются?

person Peter Bailey    schedule 10.12.2008
comment
@el_campo Вам нужно попробовать еще раз, перезапустить Apache и т. д. ;-) - person Till; 11.12.2008

спасибо за все ответы - решение заключалось в том, чтобы вернуть возвращаемое значение метода, ответственного за поплавок. т.е. это делал

return someNumber.' grams';

Я просто изменил его на

return (float)someNumber.' grams';

затем PHP обрезал все конечные нули, когда это необходимо.

Кто-нибудь может это закрыть?

person el_champo    schedule 11.12.2008

Просто чтобы исключить другие возможные причины: откуда берутся цифры? Делает ли это с буквальными значениями?

Маловероятно, что одна только настройка точности могла вызвать это. Также проверьте, не мешает ли что-нибудь выходу через такие вещи, как auto_prepend_file или output_handler.

person Community    schedule 10.12.2008

Вы должны использовать команду round(), чтобы всегда округлять до нужной точности, иначе однажды вы получите что-то вроде 2.2000000000123 из-за природы арифметики с плавающей запятой.

person Community    schedule 10.12.2008

Попробуйте встроенную функцию round;

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] );

Возвращает округленное значение val до указанной точности (количество знаков после запятой). точность также может быть отрицательной или нулевой (по умолчанию).

Пример #1 Примеры раунда()

<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
?>

Пример #2 Примеры режимов

<?php
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9

echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
?>
person Somnath Muluk    schedule 01.12.2011