教义的十进制类型:是否可以转换为字符串语言环境?

时间:2018-07-10 11:48:23

标签: symfony doctrine locale

我在其中一个实体中使用了一个十进制字段。

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)确实存储了一个数字! 我想看一下将学说将查询结果转换为字符串的代码,因为我需要一种可靠的方法将其转换回浮点数。

  • 我可以指望一个事实。是此转换的小数点分隔符吗?(并且不会有成千上万的间隔)
  • 这是否对任何语言环境都保持 ,并且对任何数据库类型都保持(postgres,mysql,mssql等)?

1 个答案:

答案 0 :(得分:1)

ocramius在github issue

中解决了我的问题

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