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

Easyadmin表单提交时float类型值被转为整数问题排查

问题解决方法

核心原因

EasyAdmin的NumberField默认小数位(scale)为0,你仅配置了表单层的scale参数,没有同步配置字段展示层的小数位参数,且你设置的表单scale值(8)和数据库实体定义的scale值(3)不匹配,导致小数部分被强制舍弃。

修复步骤

  • 第一步:修改Crud控制器中cuantia字段的配置,同步配置展示和表单的小数位:
public function configureFields(string $pageName): iterable
{
    return [
        NumberField::new('cuantia')
            ->addCssClass('eur')
            ->setNumDecimals(3) // 控制列表、详情页展示的小数位数,和数据库scale保持一致
            ->setFormTypeOption('scale', 3) // 控制表单提交时保留的小数位数,不要超过数据库定义的scale
        ,
        // 其他字段配置
    ];
}
  • 第二步(可选,推荐):如果该字段存储的是金额类数据,建议将实体字段类型从float改为decimal,避免float天生的精度丢失问题:
/**
 * @var string|float
 *
 * @ORM\Column(name="cuantia", type="decimal", precision=8, scale=3, nullable=false)
 * @Assert\Range(min = 1, maxMessage = "La derrama debe ser mayor que 1€")
 */
private $cuantia;
  • 第三步:清理Symfony缓存后测试
    执行缓存清理命令生效:
    php bin/console cache:clear
    之后重新提交125.23测试,即可正常存储和展示小数部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:27:00