laravel货币格式

rxztt3cl  于 2022-11-18  发布在  其他
关注(0)|答案(8)|浏览(172)

我在我的blade文件中的很多地方都使用了货币格式。我使用number_format来显示正确的货币格式。所以它看起来像这样

<p>${{ number_format($row->nCashInitialBalance, 2) }}</p> // $1,123.00
<p>${{ number_format($row->nCashCalculatedBalance, 2) }}</p> // $300.50
<p>${{ number_format($row->nCashPaymentsReceived, 2) }}</p> // $2,341.15
<p>${{ number_format($row->nCardFinalBalance, 2)}}</p> // $234.10

如果我不使用它它看起来像这样

<p>${{ $row->nCashInitialBalance }}</p> // $1123
<p>${{ $row->nCashCalculatedBalance }}</p> // $300.5
<p>${{ $row->nCashPaymentsReceived }}</p> // $2341.15
<p>${{ $row->nCardFinalBalance }}</p> // $234.1

同样,对于输入字段,我在很多地方使用toFixed(2)

#nDiscount_fixed").val() = parseFloat( $("#nDiscount_fixed").val()).toFixed(2);

有没有一个最简单的方法来显示所有的变量为适当的货币格式?我已经使用number_formattoFixed(2)几乎超过50次了。

djp7away

djp7away1#

您可以创建一个自定义的Laravel指令。您仍然需要在每个需要它的地方调用该指令,但这样做的好处是,如果您想更改代码(例如,用其他内容替换number_format),您只需更新该指令。
示例(摘自文档并针对您的用例进行了更新)(在您的AppServiceProviderboot方法中):

Blade::directive('convert', function ($money) {
    return "<?php echo number_format($money, 2); ?>";
});

要在Blade中使用它,请执行以下操作:

@convert($var)
yquaqz18

yquaqz182#

您可以在AppServiceProvider.php文件的boot()方法中添加自定义Blade指令。
例如:

Blade::directive('money', function ($amount) {
    return "<?php echo '$' . number_format($amount, 2); ?>";
});

在您的Blade文件中,您只需使用@money(),如下所示:

@money($yourVariable)
0ejtzxu1

0ejtzxu13#

我最不会使用“指令”...我发现在模型上做与访问器相同的逻辑更干净。

public function getAmountAttribute($value)
{
    return money_format('$%i', $value);
}
u0njafvf

u0njafvf4#

如果要设置负数的格式,则需要按以下方式操作:

Blade::directive('money', function ($amount) {
        return "<?php
            if($amount < 0) {
                $amount *= -1;
                echo '-$' . number_format($amount, 2);
            } else {
                echo '$' . number_format($amount, 2);
            }
        ?>";
 });

在刀片文件中用途:

@money(-10)

如果对指令进行编辑,则需要清除视图:

php artisan view:clear
iqjalb3h

iqjalb3h5#

如果您使用的是Laravel Cashier,则可以使用Laravel内置的formatAmount()方法。
AppServiceProvider中的boot()方法

Blade::directive('money', function ($expression) {
    return "<?php echo laravel\Cashier\Cashier::formatAmount($expression, 'gbp'); ?>";
});

在您的刀片视图中Total: @money($proudct->price)
输出-总计:100英镑
注意事项:

  • 别忘了进口
  • 清除配置(如果需要)php artisan config:clear
kcwpcxri

kcwpcxri6#

查看my money package的PHP(Laravel)。
在配置中,您可以选择小数点后的小数位数和货币来源(int或float):

'decimals' => 2,
'origin' => MoneySettings::ORIGIN_INT,

在此之后,所有货币对象将有2个小数位。对于INT原点,100$将为10000(100 * 10^2)数字。
然后创建一个示例并显示它:

money(10000)->toString(); // "$ 100"
money(10000, currency('RUB'))->toString(); // "100 ₽"

您可以通过将其传递给money() helper函数,轻松地添加每个对象的自定义显示,或者通过设置配置文件,将其应用于所有其他对象。

nqwrtyyt

nqwrtyyt7#

您可以使用PHP的内置NumberFormatter。对于Laravel,将其 Package 在directive中或在模型中使用accessor,这取决于您或它取决于您确切需要格式的情况。

  • PHP 8支持此功能
  • 一个多用途类,用于格式化不同类型的数字,包括currency、十进制数字中的金额、百分比值等。
  • 基于国家/地区locale,例如en_US

OOP Style

$amount = new NumberFormatter("en_US", NumberFormatter::CURRENCY);
echo $amount->formatCurrency(1123, 'USD'); // outputs $1,123.00

Procedural Style

$amount = numfmt_create( 'en_US', NumberFormatter::CURRENCY );;
echo numfmt_format_currency($amount, 1123, 'USD'); // outputs $1,123.00
93ze6v8z

93ze6v8z8#

使用此解决方案:

{{"$ " . number_format($data['total'], 0, ",", ".")  }}

相关问题