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 将查询结果转换为字符串的代码,因为我需要一种可靠的方法来转换回浮点数。
- 我能指望“.”这个事实吗?此转换的小数点分隔符是什么?(没有千位分隔符)
- 这是否适用于任何语言环境和任何数据库类型(postgres、mysql、mssql、... ) ?
ocramius 在 github issue
中解决了我的问题
使用 floatval
可行(此处不涉及语言环境),但 强烈建议不要使用 ,因为浮点数不能准确表示每个十进制数。
使用ext-bcmath
的建议很棒!
我在我的一个实体中使用小数字段。
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 将查询结果转换为字符串的代码,因为我需要一种可靠的方法来转换回浮点数。
- 我能指望“.”这个事实吗?此转换的小数点分隔符是什么?(没有千位分隔符)
- 这是否适用于任何语言环境和任何数据库类型(postgres、mysql、mssql、... ) ?
ocramius 在 github issue
中解决了我的问题使用 floatval
可行(此处不涉及语言环境),但 强烈建议不要使用 ,因为浮点数不能准确表示每个十进制数。
使用ext-bcmath
的建议很棒!