如何在magento2中将数字转换为货币格式


Answers:


38

在magento 2中,没有“核心”模块。您可以通过以下方法在视图文件(.phtml)中获取此文件

$ this-> helper('Magento \ Framework \ Pricing \ Helper \ Data')-> currency(number_format(50,2),true,false);

如果您只想要价格中的货币符号怎么办?currency()方法将使用当前范围货币进行转换。
MagePsycho

1
如果价格超过1000,则无法使用。number_format添加了数千个分隔符,这在点为千分隔符的欧洲系统上造成了麻烦。例如,EUR 12000的价格返回€12,00,这是错误的。然后,您需要删除number_format()并仅传递金额:$this->helper('Magento\Framework\Pricing\Helper\Data')->currency(50),true,false);
雅克(Jacques)

当然,这不是最好的答案,尽管它被票选为最高和被接受的答案。dchayka的回答是更好的贴心:magento.stackexchange.com/a/148082/5827
Akif

对于那些想知道的人,签名是currency($value, $format = true, $includeContainer = true)
Collin Anderson '18

16

首先,请勿在视图(.phtml)文件中进行货币格式化,而应使用帮助器或块或两者结合使用。

可接受的答案使用了number_format根本不应该使用的功能,至少我不会采用这种方法。

您可以尝试使用模型:

类型的模型Magento\Directory\Model\Currencyformat()它是负责小数位和格式设置的函数。

假设变量$model$product已实例化的示例:

$model->format($product->getPrice(), array('symbol' => ''), false, false)

$金额旁边没有小数的2个小数位格式。array()如果您想将存储货币附加到您的金额后,请传递空。


使用此方法的另一个好处是可以处理超过$ 1000的值。其他答案不考虑这种数字格式,最终导致前端显示不正确的价格。我希望我能给你1000票
-circleix

1
@circlesix非常感谢,非常感谢。
dchayka

那么该怎么Magento\Directory\Model\Currency办,为什么要使用它呢?它查看当前的storeview货币配置还是客户选择的货币?
Erfan

1
Currency在目录模块中看到@Erfan 模型的方式就像操纵最终价格值的助手。在Framework的帮助器示例中,您将能够将价格转换为商店的正确货币,但是您无法控制金额的精度,因此必须扩展类以对其进行自定义。货币与预期的最终金额相反,但是允许您自定义格式,十进制精度等
。– dchayka

13

您要做的是在您要使用此模板文件的块中注入“ PriceCurrencyInterface ”。

template.phtml

<div><?= $block->getFormatedPrice('342.4345') ?>

Item.php(以上模板的Block类……可能是这样)

<?php
namespace \Whatever

use Magento\Framework\Pricing\PriceCurrencyInterface;
use Magento\Framework\View\Element\Template;

class Item extends Template
{
    /** @var PriceCurrencyInterface $priceCurrency */
    protected $priceCurrency;

    public function __construct(
        Template\Context $context,
        PriceCurrencyInterface $priceCurrency,
        array $data = []
    ) {
        parent::__construct($context, $data);
        $this->priceCurrency = $priceCurrency;
    }

    /**
     * Function getFormatedPrice
     *
     * @param float $price
     *
     * @return string
     */
    public function getFormatedPrice($amount)
    {
        return $this->priceCurrency->convertAndFormat($amount);
    }

这具有基于当前商店区域设置显示正确格式的附加好处。它还提供了其他可能有用的方法,请检查一下...

确保可以检查方法签名,因为您可以配置要显示的结果,例如容器精度

priceCurrency->convertAndFormat($amount, $includeContainer, $precision)

干杯!


10

您可以通过以下方法在视图文件(.phtml)中获取此文件。

$ price = 5.5;
$ this-> helper('Magento \ Framework \ Pricing \ Helper \ Data')-> currency($ price,true,false);

对于那些想知道的人,签名是currency($value, $format = true, $includeContainer = true)
Collin Anderson


这是最快的方法,如果您不想构建单独的模块,只需将currencyInterface实现到Magento的Template-class中。
大安范登伯格

由于我需要在phtml的多个位置使用相同的格式化程序,因此我可以使用什么代替$this->我在函数内部调用您的建议
BraDev

1

使用定价助手

<?php
namespace \Vendor\Module

class MyClass extends Template
{
    public $priceHelper;

    public function __construct(
        Template\Context $context,
        \Magento\Framework\Pricing\Helper\Data $priceHelper,
        array $data = []
    ) {
        parent::__construct($context, $data);
        $this->priceHelper  = $priceHelper;
    }

    public function myCustomFunction($product) {
        return $this->priceHelper->currency($product->getPrice(),true,false);
    }
}

这将从给定产品输出价格和货币符号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.