Magento prices to display and round to the third (3rd) decimal point you need to override these files:

lib/Zend/Currency.php

Change:

protected $_options = array(
      'position'  => self::STANDARD,
      'script'    => null,
      'format'    => null,
      'display'   => self::NO_SYMBOL,
      'precision' => 2,
      'name'      => null,
      'currency'  => null,
      'symbol'    => null,
      'locale'    => null,
      'value'     => 0,
      'service'   => null,
      'tag'       => 'Zend_Locale'
  );

To

protected $_options = array(
      'position'  => self::STANDARD,
      'script'    => null,
      'format'    => null,
      'display'   => self::NO_SYMBOL,
      'precision' => 3,
      'name'      => null,
      'currency'  => null,
      'symbol'    => null,
      'locale'    => null,
      'value'     => 0,
      'service'   => null,
      'tag'       => 'Zend_Locale'
  );

Override file from core to local and change at the bottom
app/code/local/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Option.php

Change:

public function getPriceValue($value, $type)
   {
       if ($type == 'percent') {
           return number_format($value, 2, null, '');
       } elseif ($type == 'fixed') {
           return number_format($value, 2, null, '');
       }
   }

To:

public function getPriceValue($value, $type)
   {
       if ($type == 'percent') {
           return number_format($value, 3, null, '');
       } elseif ($type == 'fixed') {
           return number_format($value, 3, null, '');
       }
   }

app/code/local/Mage/Adminhtml/Block/Catalog/Product/Helper/Form/Price.php

Change:

public function getEscapedValue($index=null)
   {
       $value = $this->getValue();

       if (!is_numeric($value)) {
           return null;
       }

       return number_format($value, 2, null, '');
   }

To:

public function getEscapedValue($index=null)
   {
       $value = $this->getValue();

       if (!is_numeric($value)) {
           return null;
       }

       return number_format($value, 3, null, '');
   }

app/code/local/Mage/Core/Model/Store.php
Change:

public function roundPrice($price)
   {
       return round($price, 2);
   }

To:

public function roundPrice($price,$roundTo=3)
   {
       return round($price, $roundTo);
   }

To show in frontend:
app/code/local/Mage/Directory/Model/Currency.php

Change:

public function format($price, $options = array(), $includeContainer = true, $addBrackets = false)
    {
        return $this->formatPrecision($price, 2, $options, $includeContainer, $addBrackets);
    }

To:

public function format($price, $options = array(), $includeContainer = true, $addBrackets = false)
    {
        return $this->formatPrecision($price, 3, $options, $includeContainer, $addBrackets);
    }

For Tire Price field in backend:
app/design/adminhtml/default/default/template/catalog/product/edit/price/tier.phtml
Change:

<?php echo sprintf('%.2f', $_item&#91;'price'&#93;) ?>

To:

<?php echo sprintf('%.3f', $_item&#91;'price'&#93;) ?>

For Sales/orders order view in backend:
app/code/local/Mage/Adminhtml/Block/Sales/Items/Abstract.php
Change:

public function displayPrices($basePrice, $price, $strong = false, $separator = '<br />')
    {
        return $this->displayRoundedPrices($basePrice, $price, 2, $strong, $separator);
    }

    public function displayRoundedPrices($basePrice, $price, $precision=2, $strong = false, $separator = '<br />')
    {
        if ($this->getOrder()->isCurrencyDifferent()) {
            $res = '';
            $res.= $this->getOrder()->formatBasePricePrecision($basePrice, $precision);
            $res.= $separator;
            $res.= $this->getOrder()->formatPricePrecision($price, $precision, true);
        }
        else {
            $res = $this->getOrder()->formatPricePrecision($price, $precision);
            if ($strong) {
                $res = '<strong>'.$res.'</strong>';
            }
        }
        return $res;
    }

To:

public function displayPrices($basePrice, $price, $strong = false, $separator = '<br />')
    {
        return $this->displayRoundedPrices($basePrice, $price, 3, $strong, $separator);
    }

    public function displayRoundedPrices($basePrice, $price, $precision, $strong = false, $separator = '<br />')
    {
        if ($this->getOrder()->isCurrencyDifferent()) {
            $res = '';
            $res.= $this->getOrder()->formatBasePricePrecision($basePrice, $precision);
            $res.= $separator;
            $res.= $this->getOrder()->formatPricePrecision($price, $precision, true);
        }
        else {
            $res = $this->getOrder()->formatPricePrecision($price, $precision);
            if ($strong) {
                $res = '<strong>'.$res.'</strong>';
            }
        }
        return $res;
    }

app/code/local/Mage/Sales/Model/Order.php
Change:

public function formatPrice($price, $addBrackets = false)
{
    return $this->formatPricePrecision($price, 2, $addBrackets);
}

To:

public function formatPrice($price, $addBrackets = false)
{
    return $this->formatPricePrecision($price, 3, $addBrackets);
}

Note:If you find better solution please Notify me but this worked for me


3 Comments

Bhautik Patel · November 8, 2016 at 5:33 pm

thnk you for help me……if you have solution for magento 2 then help me

Vladimir · October 22, 2018 at 6:49 pm

Hi,

I have a better solution for change 3rd decimal. If you want the best solution contact me…

Leave a Reply to Bhautik Patel Cancel reply

Avatar placeholder

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