Specialprice и finalprice не возвращают десятичные дроби
Magento 2 возвращает обычную цену, отличную от специальной и окончательной цены. Ожидаемый результат:
$product->getPrice(); // 89,95
$product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue(); // 89,95
$product->getSpecialPrice(); // 49,95
$product->getPriceInfo()->getPrice('special_price')->getAmount()->getValue(); // 49,95
$product->getFinalPrice(); // 49,95
$product->getPriceInfo()->getPrice('final_price')->getAmount()->getValue(); // 49,95
Заданный результат:
$product->getPrice(); // 89,95
$product->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue(); // 89,95
$product->getSpecialPrice(); // 49
$product->getPriceInfo()->getPrice('special_price')->getAmount()->getValue(); // 49
$product->getFinalPrice(); // 49
$product->getPriceInfo()->getPrice('final_price')->getAmount()->getValue(); // 49
Каким-то образом специальные и окончательные цены возвращаются без десятичных знаков. Я пробовал разные вещи с разными помощниками (например, с налоговым агентом и т. Д.), Но безуспешно. Почему Magento 2.3 продолжает возвращать специальную цену без десятичных знаков?
РЕДАКТИРОВАТЬ: И если это нормальное поведение, каков был бы правильный способ получить специальная и окончательная цена в моем модуле без символов валюты и т.д., но с учетом налога?
1 answers
Если вы посмотрите следующий класс:
Vendor/magento/module-catalog/Pricing/Price/SpecialPrice.php
/**
* Returns special price
*
* @return float
*/
public function getSpecialPrice()
{
$specialPrice = $this->product->getSpecialPrice();
if ($specialPrice !== null && $specialPrice !== false && !$this->isPercentageDiscount()) {
$specialPrice = $this->priceCurrency->convertAndRound($specialPrice);
}
return $specialPrice;
}
Фактически следующая цена формата строки:
$это ->Валюта цены ->Конвертация вокруг ($Специальная цена)
Теперь перейдите в следующий класс:
Vendor/magento/module-directory/Model/PriceCurrency.php
И проверьте следующий код
/**
* Round price with precision
*
* @param float $price
* @param int $precision
* @return float
*/
public function roundPrice($price, $precision = self::DEFAULT_PRECISION)
{
return round($price, $precision);
}
Проверьте документацию для раунда как ну что ж
Вот примерный пример:
<?php
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06