我在其中一个实体中使用了一个十进制字段。
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)确实存储了一个数字! 我想看一下将学说将查询结果转换为字符串的代码,因为我需要一种可靠的方法将其转换回浮点数。
答案 0 :(得分:1)
ocramius在github issue
中解决了我的问题使用floatval
是可行的(此处不涉及任何语言环境),但强烈建议,因为浮点数不能精确地表示每个十进制数字。
使用ext-bcmath
的建议很棒!