Menu Close
    Convert your store into Magento 2 Multi Vendor Marketplace

    How To Change The Format Of Price In Magento 2

    How To Change The Format Of Price In Magento 2 : Sometime we need to change the format of price in magento 2. so here i am explaining the easiest way to do it.
    so please follow below steps.

    1 => First of all you need to override format class of magento (Magento\Framework\Locale\Format)
    for this you need to write a line in etc/di.xml

    <preference for="Magento\Framework\Locale\Format" type="Webkul\CustomPriceFormat\Model\Format" />

    2 => then override the function getPriceFormat in format class.

    namespace Webkul\CustomPriceFormat\Model;
    
    use Magento\Framework\Locale\Bundle\DataBundle;
    
    class Format extends \Magento\Framework\Locale\Format
    {
        private static $defaultNumberSet = 'latn';
    
        public function getPriceFormat($localeCode = null, $currencyCode = null)
        {
            $localeCode = $localeCode ?: $this->_localeResolver->getLocale();
            if ($currencyCode) {
                $currency = $this->currencyFactory->create()->load($currencyCode);
            } else {
                $currency = $this->_scopeResolver->getScope()->getCurrentCurrency();
            }
    
            $localeData = (new DataBundle())->get($localeCode);
            $defaultSet = $localeData['NumberElements']['default'] ?: self::$defaultNumberSet;
    
            $format = $localeData['NumberElements'][$defaultSet]['patterns']['currencyFormat']
                ?: ($localeData['NumberElements'][self::$defaultNumberSet]['patterns']['currencyFormat']
                    ?: explode(';', $localeData['NumberPatterns'][1])[0]);
    
            //your main changes are gone here.....
            $decimalSymbol = '.';
            $groupSymbol = ',';
    
            $pos = strpos($format, ';');
            if ($pos !== false) {
                $format = substr($format, 0, $pos);
            }
            $format = preg_replace("/[^0\#\.,]/", "", $format);
            $totalPrecision = 0;
            $decimalPoint = strpos($format, '.');
            if ($decimalPoint !== false) {
                $totalPrecision = strlen($format) - (strrpos($format, '.') + 1);
            } else {
                $decimalPoint = strlen($format);
            }
            $requiredPrecision = $totalPrecision;
            $t = substr($format, $decimalPoint);
            $pos = strpos($t, '#');
            if ($pos !== false) {
                $requiredPrecision = strlen($t) - $pos - $totalPrecision;
            }
    
            if (strrpos($format, ',') !== false) {
                $group = $decimalPoint - strrpos($format, ',') - 1;
            } else {
                $group = strrpos($format, '.');
            }
            $integerRequired = strpos($format, '.') - strpos($format, '0');
    
            $result = [
                //TODO: change interface
                'pattern' => $currency->getOutputFormat(),
                'precision' => $totalPrecision,
                'requiredPrecision' => $requiredPrecision,
                'decimalSymbol' => $decimalSymbol,
                'groupSymbol' => $groupSymbol,
                'groupLength' => $group,
                'integerRequired' => $integerRequired,
            ];       
            return $result;
        }
    }

    Hope so it will help.

    . . .
    Discuss on Helpdesk

    Leave a Comment

    Your email address will not be published. Required fields are marked*


    Be the first to comment.

    Back to Top