You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Laravel中如何将float浮点数值转换为保留2位小数的格式

Laravel 中保留 productivity 字段两位小数的实现方案

你可以根据自身业务场景选择以下三种实现方案:

方案1:控制器计算时直接处理后存储

适合需要把格式化后的值直接存入数据库的场景,修改控制器计算逻辑即可:

// 先计算总时长避免重复取值
$total_time = $request->input('admin_time') + $request->input('driving_time') + $request->input('work_time');
// 使用 round 函数四舍五入保留2位小数,返回float类型符合字段定义
$energy->productivity = round($request->input('work_time') / $total_time, 2);

// 若需要截断小数而非四舍五入(0.727273直接取0.72),可以改用以下写法
// $energy->productivity = floor(($request->input('work_time') / $total_time) * 100) / 100;

方案2:视图层输出时格式化

适合需要保留数据库中原始精度,仅在前端展示时格式化的场景,直接修改Blade视图代码:

{{-- 使用 number_format 会自动补全两位小数,比如0.7会展示为0.70 --}}
<td>{{ number_format($data->productivity, 2, '.', '') }}</td>

{{-- 仅需要四舍五入不需要补零的话可以用round --}}
{{-- <td>{{ round($data->productivity, 2) }}</td> --}}

方案3:模型定义访问器(推荐多场景复用)

如果多个业务端都需要用到格式化后的 productivity 值,可以在模型中定义访问器,无需重复写格式化逻辑:
在App\Models\Energy模型中添加对应代码:

Laravel 9+ 版本写法

use Illuminate\Database\Eloquent\Casts\Attribute;

protected function productivity(): Attribute
{
    return Attribute::make(
        get: fn ($value) => round($value, 2),
        // 存储时自动格式化可以加上set逻辑
        // set: fn ($value) => round($value, 2)
    );
}

Laravel 8 及更早版本写法

public function getProductivityAttribute($value)
{
    return round($value, 2);
}

定义后直接调用$data->productivity就会自动返回保留两位小数的结果,原有业务代码无需修改。

注意:如果你的数据库float字段存在精度丢失问题,建议将字段类型改为decimal(10,2),从存储层面固定小数位。

内容的提问来源于stack exchange,提问作者sifakale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:39:01