如何在Laravel视图中显示带小数位的货币价格值?
在Laravel视图中格式化货币为两位小数的几种方案
如果你想把视图里的价格和小计显示成带两位小数的格式(比如10.00而非10),这里有几个简单实用的方法:
方法1:使用PHP原生number_format()函数
这是最直接的方式,不需要额外依赖,适用于任何PHP环境。只需要把原来的变量输出包裹在number_format()里,指定小数位数为2即可:
@foreach($selectedTypes as $k=>$selectedType) <li> <span>{{$k}}</span> <span>{{$selectedType['quantity']}}</span> <!-- 格式化价格为两位小数 --> <span>{{ number_format($selectedType['price'], 2) }}</span> <!-- 格式化小计为两位小数 --> <span>{{ number_format($selectedType['subtotal'], 2) }}</span> </li> @endforeach
number_format()的第二个参数就是你要保留的小数位数,哪怕原数值是整数,也会自动补零变成x.00的格式。如果担心数值可能为null,可以加上空值处理:
<span>{{ number_format($selectedType['price'] ?? 0, 2) }}</span>
方法2:使用Laravel官方的Number类(Laravel 9+)
如果你用的是Laravel 9及以上版本,推荐用框架自带的Number类,它不仅能格式化小数,还支持本地化配置(比如不同地区的千位分隔符、小数点样式):
@foreach($selectedTypes as $k=>$selectedType) <li> <span>{{$k}}</span> <span>{{$selectedType['quantity']}}</span> <span>{{ \Illuminate\Support\Number::format($selectedType['price'], decimals: 2) }}</span> <span>{{ \Illuminate\Support\Number::format($selectedType['subtotal'], decimals: 2) }}</span> </li> @endforeach
如果需要更贴合本地化的货币格式(比如加上货币符号),还可以用formatCurrency方法:
<span>{{ \Illuminate\Support\Number::formatCurrency($selectedType['price'], 'USD') }}</span> <!-- 会显示 $10.00 -->
方法3:自定义Blade指令(适合频繁使用的场景)
如果你的视图里很多地方都需要格式化货币,可以自定义一个Blade指令,让代码更简洁:
- 打开
app/Providers/AppServiceProvider.php,在boot()方法里添加:
use Illuminate\Support\Facades\Blade; public function boot() { Blade::directive('money', function ($expression) { // 处理空值+格式化两位小数 return "<?php echo number_format($expression ?? 0, 2); ?>"; }); }
- 然后在视图里直接使用这个指令:
@foreach($selectedTypes as $k=>$selectedType) <li> <span>{{$k}}</span> <span>{{$selectedType['quantity']}}</span> <span>@money($selectedType['price'])</span> <span>@money($selectedType['subtotal'])</span> </li> @endforeach
这样每次需要格式化货币的时候,只需要写@money($value)就可以了,非常方便。
内容的提问来源于stack exchange,提问作者johnW
相关产品推荐
相关产品推荐

