2012-06-04 1 views
4

Есть ли способ с PHP показать 2 (или x) десятичные разряды, но не показать .00, если целое число?печатать читаемые затраты из хранимых десятичных знаков

Я посмотрел на number_format, но это не выглядит, как он приспосабливает это точно .. хотя я хотел бы запятые каждые 3 без знаков после запятой

34.00 => 34 
34.7 => 34.70 
12424.9=> 12,424.90 

Мои номера сохраняются в виде поплавков ш/2 десятичных разряда в базе данных, поэтому я не обязательно нуждаюсь в этом

+1

Там же [ ' money_format'] (http://php.net/money_format) –

ответ

1

Что вы можете сделать, это проверить, является ли это целое число первым, округляя его с помощью floor() и проверяя, равно ли это полной десятичной версии.

echo (floor($cost) == $cost) ? floor($cost) : number_format($cost, 2, '.', ','); 

или

if (floor($cost) == $cost) { 
    echo floor($cost); 
} 
else { 
    echo number_format($cost, 2, '.', ','); 
} 

Другой вариант заключается в использовании money_format():

echo (floor($cost) == $cost) ? floor($cost) : money_format('%.2n', $cost); 

или

if (floor($cost) == $cost) { 
    echo floor($cost); 
} 
else { 
    echo money_format('%.2n', $cost); 
} 
+0

Это хороший код, но я бы сохранил результат 'floor ($ cost)' в переменной, чтобы предотвратить одновременное вычисление одной и той же вещи. :) Кроме того, это кажется прекрасным. – Pateman

+0

Это действительно не имеет никакого значения, floor() - очень легкая функция **, и она запускается всего один или два раза. (хотя идея, стоящая за ней, хороша, но более применима в таких случаях, как параметры цикла, когда она может быть запущена больше раз) – Jeroen

+0

Я знаю, я просто говорю, что всегда хорошо следовать хорошим правилам кодирования. :) – Pateman