2010-08-16 22 views
0

我们都看到,商店对其产品的定价很好看; “1.99”,“209.90”等。PHP:修改价格看起来很有意义?

如果您手动输入价格,也可以轻松完成,但是我们会说我们会有一个存储价格的数据库,每天根据货币变化更新数据。 价格因此自动计算,最终会看起来像“1547,83”,这对眼睛来说根本不好。

如何在PHP中创建一个函数,它可以将价格进行四舍五入,并根据奖品的大小将其调整到“可呈现”的设定容差范围内?

非常感谢!

+0

请详细说明您需要的公差。什么将'.84'变成 - '.85'或'.95'或'.99'? – 2010-08-16 11:03:34

+1

由于这会改变商品的实际价格,因此您需要从商业角度决定您愿意通过使其价格升高和降低的价格多少。然后,只需定义“可呈现”的含义,然后将价格向上或向下调整至最接近的价格范围内的可呈现价格。棘手的一点是通过可代表的方式来确定你的意思,而不是编写PHP。 – Douglas 2010-08-16 11:06:12

+0

嗨!那么,我们需要对不同大小的价格有不同的容差。两位数的项目应该用不同的公差四舍五入,然后是四位数3000usd的项目。这是否更清晰? – Industrial 2010-08-16 11:54:23

回答

6

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 

EDIT 2

略多fancified,确定舍入基于实际价值的高低:

$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 
+0

我认为这将会过于通用:必须有一条规则设置指定如何向上和向下四舍五入。但OP没有提供足够的信息与此处合作,所以这是目前最好的结果 – 2010-08-16 11:05:10

+0

这是一个非常通用的解决方案,正是出于这个原因......我的大部分经验都是销售团队实际上设定价值,批量折扣的步骤点(然后在实际与客户进行交易时完全忽略任何预设价格)。这种任意的解决方案并不适合这种真实世界的体验 – 2010-08-16 11:16:09

+0

Hi Mark!非常感谢你的例子。这是一个很好的起点,它将如何适应较小的价值,如1.36美元的价格 - 这不适合价值增加到1.99美元? – Industrial 2010-08-16 11:57:17

0

我们真的在这里我们认为1.90和3.99点要用户友好。

这是可怕的。 A 用户友好等价物将是2.00或4.00。 .99结尾是推销员哄骗使用户误判价格的伎俩。

1.99在你称之为“眼睛”的时候绝对不是。

编辑

如果你想,让漂亮的你可以做喜欢的事,可怕的推销员:

$newprice = ceil($original_price) - 0.01; 
+2

用户友好*可能是错误的,但推销员的诀窍是OP想要的东西。 – 2010-08-16 10:57:14

+0

或者他可能对9s的痴迷 – 2010-08-16 10:59:14

+0

9的肯定会响起我的钟声,但它不是纯粹的我们正在寻找的东西,只是一个更好的方式来调整价格,以更好看的。如果你明白的话,它也可以是139和199? – Industrial 2010-08-16 11:55:53

1

这取决于一些规则。你想四舍五入吗?如果价格是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

一旦定义这些规则,它仅仅是一个(数字)变换。这不是一个编程挑战,你应该定义舍入规则。