Skip to main content
How to Format Price Value with Currency Symbol in Magento 2

Format Price with Currency Symbol in Magento 2 [the Right Way!]

It isn’t hard to format price values in Magento 2. There are many (wrong) ways to achieve the correct formatting of prices — or any value — in Magento 2. But fear not, today I will provide you with the right, clean way to format any value to a price (with currency symbol).

Although the entire professional Magento community is in agreement that you should never use the Object Manager. Because using the Object Manager’s bad. Many developers still advise using the Object Manager to create a Pricing Helper-Object. This is an absolute NO-NO!

So the next time someone at StackOverflow or anywhere advises you to use the Object Manager, you tell them:

The next time anyone advises you to use the Object Manager in Magento 2, you tell them:
The next time anyone advises you to use the Object Manager in Magento 2, you tell them: “How about no?”

Magento 2 offers something called Interfaces. Something that many developers appear to have missed. To format your values to a price the right way, you should use the PriceCurrencyInterface of the Magento Framework.

This interface contains a format()-method, to which you can just pass any value and it will return an appropriate formatted price. It has other options too.

How to Format Price using CurrencyInterface in Magento 2

To implement this interface into your custom module through e.g. a Model, Controller, Plugin, or anything actually, you should use dependency injection:

<?php
namespace Daan\CustomModule\Model; // Or Controller, or Plugin, or anything actually.
use Magento\Framework\Pricing\PriceCurrencyInterface as CurrencyInterface;
class Custom {
protected $currencyInterface;
public function __construct(
CurrencyInterface $currencyInterface
) {
$this->currencyInterface = $currencyInterface;
}
// Let's imagine I passed a valid $productCollection here.
public function getMyFormattedPrice( $productCollection ) {
$prices = [];
foreach ( $productCollection as $product ) {
$prices[] = $this->currencyInterface->format(
$product->getPrice(), // the price value.
false, // don't include the container span.
4 // default precision is two decimals, but I want 4 for some reason.
);
}
return $prices;
}
}
view raw Model\Custom.php hosted with ❤ by GitHub

As you can see the format()-method allows three parameters:

  1. The value (obviously),
  2. A boolean (true/false) to define whether the container span should be included,
  3. An integer value to define the precision of the rendered value, which defaults to two.

Formatting values to prices using the currency settings of the storeview is easy, because Magento Framework provides an interface to format price values. Most Magento 2 modules make their methods available through an interface, so you don’t have to use the Object Manager. In the end, I hope this will help you to create cleaner code in Magento 2. Any thoughts? Let me know!

Buy me a beer?

Do you appreciate my work and support? Please consider supporting me by donating, so I can continue to develop and write useful solutions for you.

Choose amount

Personal Message

Thank you! 🙂

Daan van den Bergh

Magento 2 Back-end Developer with a passion for trainlifting, airplane-gliding, hunting trees and creating fake hobbies.

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.