我根据每个客户设置自定义价格。使用网络服务我收到每个客户的具体价格,格式为:XX,DD
当我使用函数setprice来设置产品的新价格时:
$product->setFinalPrice($price);
Magento汇总价格,例如,如果$ price是38,50,那么它将产品价格设置为38.我已经尝试将','换成'。'使用str_replace,但在这种情况下,它似乎无法设置价格。
我如何告诉Magento也使用小数?
由于
答案 0 :(得分:2)
首先,您应该将您的价格转换为十进制数字:
$value="38,50";
$amount = Zend_Locale_Format::getNumber($value,array('locale'=>'nl_NL'));
// or you can use str_replace
在Magento产品中有两种标准价格:
$product->getPrice();
$product->getSpecialPrice();
finalPrice - 它实际上不是产品价值,它将由Magento根据价格,special_price,等级价格等计算得出。您应该设置价格值并保存产品:
$value = "38,50"; //this decimalformat is used in nl_Nl locale
$amount = Zend_Locale_Format::getNumber($value,array('locale'=>'nl_NL'));
$amount = Mage::app()->getStore()->roundPrice($amount); //round price based on Magento logic
$product->setPrice($amount); //price - is actual value of product
// some extra code here
$product->save();
答案 1 :(得分:1)
我会投入你可以使用:
echo number_format($_product->getPrice(), 2)
它会给你几个小数位。
答案 2 :(得分:0)
我猜你不希望价格上涨。如果是这种情况,那么您的解决方案取决于您使用的PHP版本。
PHP 5.3你可以简单地使用round函数将它向下舍入:
round($price, 2, PHP_ROUND_HALF_DOWN);
如果您使用的是PHP 5.2,那么您没有PHP_ROUND_HALF_DOWN的luxary,因此您必须将以下函数放在某处(帮助程序对我来说最有意义)并调用它:
floor($line_item_price * 100) / 100;
这样做首先将值乘以100,然后将值置于最低值。这会给你一个向下舍入的值,精度为2.然后除以100得到正确的值。
数字100来自功率(10,所需精度)
我希望你使用的是PHP 5.3。我不喜欢非常喜欢PHP 5.2解决方案。
答案 3 :(得分:0)
要在magento中整理价格,您需要覆盖目录/货币模型方法convert。
Mage_Directory_Model_Currency::convert()
在这里你会发现这样的
return $price*$rate
需要像这样设置
return round($price*$rate);