You need to enable JavaScript to run this app. 为何MySQL存储的decimal类型值在Laravel页面输出时显示为整数
优惠活动
大模型
产品
解决方案
定价
更多

为何MySQL存储的decimal类型值在Laravel页面输出时显示为整数

问题原因及解决方案

核心原因

你遇到的问题是Laravel模型的属性自动转换逻辑导致的,dd()打印模型时输出的是原始数据库查询结果,而直接访问属性时会触发模型的属性处理逻辑,丢失小数部分的常见原因如下:

  • 模型$casts配置错误
    你的Quotation模型中大概率将cost字段的转换类型设置为了integer,错误配置示例:
protected $casts = [
    'cost' => 'integer',
];

只需要将其修改为保留两位小数的decimal类型即可:

protected $casts = [
    'cost' => 'decimal:2',
];
  • 自定义访问器逻辑错误
    检查Quotation模型中是否定义了getCostAttribute方法,里面如果有强制转整数、取整的逻辑,就会导致小数部分丢失,比如:
public function getCostAttribute($value)
{
    return intval($value);
}

删除错误的转换逻辑,或者修改为保留两位小数的处理即可。

  • 父类/引用Trait的属性处理逻辑错误
    如果Quotation模型继承了自定义父类、或者引用了处理属性的Trait,重写了getAttribute方法并对数值字段做了统一整数转换,也会出现该问题,排查对应逻辑修改即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:45:03