Magento округляет цену товара - PullRequest
1 голос
/ 26 октября 2011

Я устанавливаю индивидуальную цену в зависимости от каждого клиента.Используя веб-сервис, я получаю конкретную цену для каждого покупателя в формате: XX, DD

Когда я использую функцию setprice для установки новой цены на продукт:

$product->setFinalPrice($price);

Magento округляет цену, и, например, если цена в $ 38,50, тогда она устанавливает цену продукта равной 38. Я пытался изменить ',' для '.с str_replace, но в данном случае кажется, что он не может установить цену.

Как я могу сказать Magento также использовать десятичные дроби?

Спасибо

Ответы [ 4 ]

2 голосов
/ 29 мая 2013

Сначала вы должны преобразовать свою цену в десятичное число:

$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 голос
/ 26 октября 2011

Я добавлю, что вы можете использовать:

echo number_format($_product->getPrice(), 2)

Это даст вам пару десятичных знаков.

0 голосов
/ 25 сентября 2014

Чтобы округлить цену в magento, вам нужно перезаписать метод преобразования каталога / модели валют.

Mage_Directory_Model_Currency::convert()

здесь вы найдете вот так

return $price*$rate

и нужно установить вот так

 return round($price*$rate);
0 голосов
/ 26 октября 2011

Полагаю, вы не хотите, чтобы цена округлялась вверх.Если это так, то ваше решение зависит от версии PHP, которую вы используете.

PHP 5.3, вы можете просто использовать функцию округления, чтобы округлить его так:

round($price, 2, PHP_ROUND_HALF_DOWN);

Есливы используете PHP 5.2, у вас нет люкса PHP_ROUND_HALF_DOWN, поэтому вы должны поместить куда-нибудь следующую функцию (для меня больше всего подходит помощник) и вызвать ее:сначала умножьте значение на 100, а затем задайте значение.Это дает округленное до нуля значение с точностью до 2. Затем разделите на 100, чтобы получить правильное значение.

Число 100 происходит от степени (10, требуемая точность)

Я надеюсь,вы находитесь на PHP 5.3.Мне не очень нравилось делать решение PHP 5.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...