2013-01-04 79 views
0

我的网站是由magento系统用于购物。现在我添加一个关于好的国外价格的函数。例如: 如果价格是35.4美元,它将被更改为34.99美元; 如果价格是35.5美元,它将被更改为35.99美元;php round()导致的错误

code:round(35.4)+ 0.99;

现在这是一个问题,我的产品有几个选项链接“类型”,“颜色”。不同的选项显示不同的价格,就像magento中的默认配置产品一样。产品页面中的 :价格为$ 1000显示$ 999.99,颜色为红色+ $ 100显示+ $ 99.99 ,类型为大+50显示为+ 49.99。这里的总价格是1149.97。但在购物聊天中价格是圆形的(1000 + 100 +50)+0.99 = 1149.99。所以我不知道如何处理它。

有人帮我.....等待你的建议。

+0

我是这个星球上唯一没有被这个愚蠢的.99价格愚弄。它在数学上不可能以0.99 aaa和所有产品的SUM(如果它不是某种x%10 == 1)结尾的所有产品。您仍然可以为用户添加一些花哨的“在线折扣”,即他的最终价格又是超级.99的价格。 Buuuut你如何在你的财务系统中预订这些账户?我的意思是,如果一个好的成本100,你的书不应该收到约99.99 – Najzero

+0

轮(35.5)+ 0.99 = 36.99(不35.99)的支付。你可以尝试地板(35.5)+ 0.99 = 35.99 ...见http://php.net/manual/en/function.round.php ... http://php.net/manual/en/function.floor .php –

+0

对不起,我犯了一个错误。代码是:round(35.4)-1 + 0.99,因此价格是34.99 – user1947907

回答

0

因为Magento的最终价格计算onFly,你将重写

app/code/core/Mage/CatalogRule/Helper/Data.php 

及更换方法喜欢的。 (你需要添加到adminhtml它的选项或硬编码它)

public function calcPriceRule($actionOperator, $ruleAmount, $price) 
{ 
    $priceRule = 0; 
    switch ($actionOperator) { 
     case 'to_fixed': 
      $priceRule = min($ruleAmount, $price); 
      break; 
     case 'to_percent': 
      $priceRule = $price * $ruleAmount/100; 
      break; 
     case 'by_fixed': 
      $priceRule = max(0, $price - $ruleAmount); 
      break; 
     case 'by_percent': 
      $priceRule = $price * (1 - $ruleAmount/100); 
      break; 
     case 'my_custom_prices': 
      //your price rules 
      break; 
    } 
    return $priceRule; 
}