在编辑表单的Symfony2 + Doctrine2小数四舍五入(Rounded decimal i

2019-07-29 19:59发布

如何设置Symfony2的实体内小数精度和规模? 我已经在我的实体像这样使用十进制数据类型经度字段定义纬度:

/**
 * @ORM\Column(type="decimal", precision="10", scale="6", nullable=true)
 */
protected $latitude;

当持续的新对象时,它正确保存十进制(我可以看到在phpMyAdmin 52.406374)。 然而显示编辑形式时数被舍入为52406和更新后它被存储在MySQL作为52.406000。 大概什么是错我的学说的配置,但我不知道是什么。

为什么经度和纬度越来越圆润?

找到了解决办法:

Symfony的的表格组件呈现小数表单字段类型=“文本”。 当使用:

->add('latitude', 'number', array(
    'precision' => 6,
))

它是正确呈现。 从评论的主题不说明我的问题。 我想他们已经修正了“转换为浮动”的精度。 当我在树枝模板显示纬度它显示正确的(不四舍五入)值。

Answer 1:

也许问题是不是因为你的学说映射。 看看这个参考文档NumberType 。

这是你用什么? 你可能有改变的精度。



Answer 2:

如何设置symfony的十进制类型的精度和规模:

设置在你的实体,就像这样:

protected $mycolumn;
/**
* @ORM\Column(type="decimal", precision=14, scale=8, nullable=true)
*/

这将在MySQL数据库中的数据类型:

mycolumn decimal(14,8)

在原则2指定小数字段类型时,什么规模和精确度是什么意思?



Answer 3:

在Symfony3.2你应该使用规模:

$builder->add('lat', NumberType::class, array('scale' => 8));

这指定多少位小数将被允许,直到场舍提交的值(通过rounding_mode)。 例如,如果比例设置为2,20.123提交的值将到,例如,20.12(取决于您rounding_mode)四舍五入。



文章来源: Rounded decimal in edit form Symfony2 + Doctrine2