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

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

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

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

10.12.2008 18:35:51
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 и некоторых других боксах

5
10.12.2008 18:51:39

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

3
10.12.2008 18:46:17
@el_campo Вам нужно попробовать еще раз, перезапустить Apache и т. д. ;-)
Till 10.12.2008 23:06:44

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

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

0
10.12.2008 18:51:59

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

0
11.12.2008 15:31:36

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

return someNumber.' grams';

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

return (float)someNumber.' grams';

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

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

2
11.12.2008 11:57:17

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

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

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

Пример # 1 round () примеры

<?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
?>
0
1.12.2011 10:52:14