Doctrine 的十进制类型:转换为字符串语言环境?

Doctrine's decimal type: conversion to string locale aware?

我在我的一个实体中使用小数字段。

class MyTest {
    /**
    * @ORM\Column(type="decimal", precision=20, scale=2)
    */
    private $value;

    public function getValue() {
        dump($this->value);
        return floatval($this->value);        
    }
    public function setValue(float $value) {
        $this->value = $value;
    }
}

假设我在具有德语区域设置的计算机上实例化并保留 MyTest:

$mytest = new MyTest();
$mytest->setValue(1234.56);

从数据库中获取此对象时,$this->value 将是字符串 "1234.56",而不是浮点数。此外,此字符串有 no 千位分隔符和一个点 (".") 作为小数点分隔符。但是我的(德语)语言环境不同。

我不确定 getValue 中的字符串到浮点数的转换在每个系统上是否正确。通常我希望必须使用 localeconv 来获得此转换的正确分隔符。

但是,数据库(postgres)确实存储了一个数字! 我想看看 doctrine 将查询结果转换为字符串的代码,因为我需要一种可靠的方法来转换回浮点数。

ocramius 在 github issue

中解决了我的问题

使用 floatval 可行(此处不涉及语言环境),但 强烈建议不要使用 ,因为浮点数不能准确表示每个十进制数。 使用ext-bcmath的建议很棒!