【问题标题】:Rounded decimal in edit form Symfony2 + Doctrine2Symfony2 + Doctrine2 编辑形式的四舍五入小数
【发布时间】:2012-06-14 07:09:27
【问题描述】:

如何在 symfony2 实体中设置小数精度和小数位数?我在我的实体中使用十进制数据类型在经度字段中定义了纬度,如下所示:

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

当持久化新对象时,它会正确保存十进制(我可以在 phpMyAdmin 中看到 52.406374)。但是,当显示编辑表单时,数字会四舍五入到 52,406,并且在更新后它会以 52.406000 的形式存储在 mysql 中。可能我的 Doctrine 配置有问题,但我不知道是什么。

为什么纬度和经度是四舍五入的?

找到了解决方案:

Symfony 的表单组件将十进制表单字段呈现为 type="text"。使用时:

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

它被正确渲染。评论中的线程没有描述我的问题。 我猜他们已经修复了“转换为浮点”精度的错误。 当我在树枝模板中显示纬度时,它显示的是正确的(不是四舍五入的)值。

【问题讨论】:

  • 不是this造成的吗?

标签: symfony doctrine-orm decimal


【解决方案1】:

也许问题不在于您的学说映射。 查看NumberType 的参考文档。

这是你用的吗?您可能必须更改精度。

【讨论】:

    【解决方案2】:

    如何设置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?

    【讨论】:

      【解决方案3】:

      在 Symfony3.2 中你应该使用 scale:

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

      这指定在该字段之前允许多少个小数 对提交的值进行四舍五入(通过 rounding_mode)。例如,如果规模 设置为 2,提交的值 20.123 将四舍五入为 例如,20.12(取决于您的 rounding_mode)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-31
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        相关资源
        最近更新 更多