Laravel 8中可替代float或double的浮点数存储迁移字段写法是什么
Laravel迁移存储指定精度浮点数的实现方案
空白处的填写方案
你可以根据场景选择以下两种实现方式,优先推荐定点数存储方案,避免精度丢失:
方案1:使用decimal定点类型(推荐,尤其适用于金额存储)
空白处填写decimal,完整代码如下:
$table->decimal('money', 6, 1); // 用于存储最大99999.9的定点数,完全覆盖你需要的1.5~99999.5范围
参数说明:
- 第2个参数
6:代表数值总位数,包含整数部分和小数部分 - 第3个参数
1:代表小数部分占1位,对应的整数部分就占5位,最大可存储99999.9的数值
注意:
decimal是定点存储类型,不会出现浮点数精度丢失问题,涉及金额、统计等对精度要求高的场景必须用这个类型。
方案2:使用float浮点类型(不推荐用于金额场景)
如果你不需要严格精度控制,只是存储普通浮点数值,也可以填写float:
$table->float('money');
缺陷:
float是近似存储类型,进行四则运算时容易出现精度误差,比如0.1+0.2计算结果不等于0.3的问题,绝对不要用于金额计算场景。
金额存储拓展最优实践
你也可以把金额单位转换为最小单位(比如元转成分),直接用整数类型存储:
$table->integer('money'); // 1.5元存储为150分,读取后再除以100转换为元即可
这个方案完全避免了浮点数运算的精度问题,也是很多金融类系统的常用选择。
内容的提问来源于stack exchange,提问作者Shahed Khan
相关产品推荐
相关产品推荐

