6

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

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

4

3 回答 3

4

如何设置 symfony 十进制类型的精度和小数位数:

将其设置在您的实体中,如下所示:

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

这将设置 MySQL 数据库中的数据类型:

mycolumn decimal(14,8)

在 Doctrine 2 中指定十进制字段类型时,比例和精度是什么意思?

于 2013-12-20T21:23:42.863 回答
3

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

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

于 2012-06-11T11:37:34.537 回答
3

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

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

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

于 2016-12-16T14:14:32.363 回答