编辑形式为Symfony2 + Doctrine2的圆形小数

时间:2012-06-11 11:20:05

标签: symfony doctrine-orm decimal

如何在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,
))

渲染得当。评论中的帖子没有描述我的问题。 我猜他们已经修复了'转换为浮点'精度的错误。 当我在树枝模板中显示纬度时,它显示正确的(非圆形)值。

3 个答案:

答案 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的参考文档。

这是你用的吗?您可能需要更改精度。