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
相关产品推荐
相关产品推荐

