如何在symfony2实体中设置小数精度和小数位?我在我的实体中使用十进制数据类型在经度字段中定义了纬度,如下所示:
/**
* @ORM\Column(type="decimal", precision="10", scale="6", nullable=true)
*/
protected $latitude;
当持久保存新对象时,它会正确保存十进制(我可以在phpMyAdmin中看到52.406374)。但是,当显示编辑表单时,数字将四舍五入为 52,406 ,更新后将其存储在mysql中,如52.406000。我的Doctrine配置可能有问题,但我不知道是什么。
为什么纬度和经度会变圆?
找到解决方案:
Symfony的Form组件将十进制表单字段呈现为type =“text”。使用时:
->add('latitude', 'number', array(
'precision' => 6,
))
渲染得当。评论中的帖子没有描述我的问题。 我猜他们已经修复了'转换为浮点'精度的错误。 当我在树枝模板中显示纬度时,它显示正确的(非圆形)值。
答案 0 :(得分:4)
如何设置symfony十进制类型精度和比例:
在您的实体中设置它,如下所示:
protected $mycolumn;
/**
* @ORM\Column(type="decimal", precision=14, scale=8, nullable=true)
*/
这将在MySQL数据库中设置数据类型:
mycolumn decimal(14,8)
What do scale and precision mean when specifying a decimal field type in Doctrine 2?
答案 1 :(得分:3)
在Symfony3.2中,你应该使用scale:
$builder->add('lat', NumberType::class, array('scale' => 8));
指定在字段之前允许的小数位数 舍入提交的值(通过rounding_mode)。例如,如果缩放 设置为2,提交值20.123将四舍五入为 例如,20.12(取决于你的rounding_mode)。
答案 2 :(得分:2)
也许问题不是由于你的学说映射。 请查看NumberType的参考文档。
这是你用的吗?您可能需要更改精度。