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

如何在MariaDB设置2位小数?Laravel返回值精度异常求助

问题解答:浮点数精度异常与MariaDB小数位设置

一、1.68返回值出现精度异常的原因

这是二进制浮点数的固有精度缺陷导致的:

  • 十进制中的1.68无法被二进制浮点数精确表示,它在二进制中是无限循环的小数,存储和读取时会产生近似值,最终在PHP输出时就变成了1.6800000000000002;而1.67的二进制表示刚好能被近似到不会显示多余小数位的程度。
  • 哪怕数据库里存的是精确的DECIMAL类型值(1.68),如果Laravel模型未正确定义字段类型(比如默认按float处理),或者资源类直接输出时PHP自动将DECIMAL值转为float类型,就会触发这个精度问题。

除了你用的round()临时方案,还可以用这些方法彻底解决:

  • 在Laravel资源类中用number_format($this->settlement_factor, 2)强制保留两位小数;
  • 在模型的$casts属性里添加'settlement_factor' => 'decimal:2',让Laravel自动处理精度转换。

二、MariaDB设置小数位为2的方法

直接将字段定义为DECIMAL类型并指定小数位即可,DECIMAL是精确数值类型,不会出现浮点数精度问题:

1. 创建表时配置

CREATE TABLE your_table (
    -- 其他字段...
    settlement_factor DECIMAL(10, 2) -- 10为总位数(整数位+小数位),2为小数位,可按需调整总位数
);

2. 修改已有表的字段

ALTER TABLE your_table MODIFY COLUMN settlement_factor DECIMAL(10, 2);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:06:18