PHP: Изменение цены, чтобы выглядеть презентабельно? - PullRequest
0 голосов
/ 16 августа 2010

Мы все видели, что магазины имеют привлекательные цены на свои товары;«1,99», «209,90» и т. Д.

Это также легко сделать, если вводить цены вручную, но, скажем, у нас будет база данных, в которой хранятся цены, которые ежедневно обновляются в соответствии с изменениями валют,Поэтому цены рассчитываются автоматически и в конечном итоге будут выглядеть как «1547,83», что совсем не приятно для глаз.

Как можно сделать функцию в PHP, которая округляет цены и корректирует их так, чтобы«презентабельный» в пределах установленных допусков в зависимости от размера приза?

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

Ответы [ 3 ]

6 голосов
/ 16 августа 2010

money_format () или number_format () Последнее обычно лучше - несмотря на название - для значений валюты

РЕДАКТИРОВАТЬ

Исходя из комментариев Пекки, комбинация number_format () и round () может дать то, что вы хотите:

$value = 1547.83;

echo number_format($value,2),'<br />';
echo number_format(round($value,1),2),'<br />';
echo number_format(round($value,0),2),'<br />';
echo number_format(round($value,0)-0.01,2),'<br />';
echo number_format(round($value,-1),2),'<br />';

дает

1,547.83
1,547.80
1,548.00
1,547.99
1,550.00

РЕДАКТИРОВАТЬ 2

Чуть более вычурно, определяя уровень округления на основе фактического значения:

$value = 1547.83;
$pos = 3 - floor(log10($value));
echo number_format(round($value,$pos)-0.01,2),'<br />';

//  gives 1,547.99

$value = 1547982.83;
$pos = 3 - floor(log10($value));
echo number_format(round($value,$pos)-0.01,2),'<br />';

//  gives 1,547,999.99
1 голос
/ 16 августа 2010

Это зависит от некоторых правил. Хотите округлить вверх или округлить? Если цена составляет 1,93, хотите ли вы сделать это 1,95 или 1,90 или 1,99?

Я думаю, что вы хотите только округлить центы, а не всю цену.

Сначала определите, какое округление должно быть сделано, что для меня имеет смысл:

  • x, 00 - x, 20 ==> (x-1), 99
  • x, 21 - x, 75 ==> x, 49 или x, 55
  • x, 75 - x, 99 ==> x, 99

Как только вы определили эти правила, это всего лишь (числовое) преобразование. Это не столько проблема программирования, но, мне нужно просто определить правила округления.

0 голосов
/ 16 августа 2010

Действительно ли мы находимся в точке, где мы считаем 1,90 и 3,99 пользователь дружественными.

Это страшно. дружественный пользователю эквивалент будет 2,00 или 4,00. Окончание .99 - это хитрость продавца, чтобы заставить пользователя неверно оценить цену.

1.99 ни в коем случае не "приятно для глаз", как вы это называете.

EDIT

Если вы хотите, чтобы продавцу было приятно, вы могли бы сделать что-то ужасное, например:

$newprice = ceil($original_price) - 0.01;
...