Doctrine 文档在这里指出,对于float
映射类型,区域设置是相关的:
-
float
:将 SQL 浮点数(双精度)映射到 PHP 双精度的类型。重要提示:仅适用于使用小数点作为分隔符的区域设置。
我假设这指的是 SQL 服务器的语言环境设置,但似乎没有更具体的文档,所以它阅读了源代码,运行一些测试,或者在这里询问,以防有人已经解决了这个问题。
从教义 2.3,类Doctrine\DBAL\Types\FloatType
:
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return (null === $value) ? null : (double) $value;
}
根据 PHP 手册(转换为浮点数、转换为整数、字符串转换为数字),这似乎不支持使用逗号作为小数分隔符的输入值,因此数据库服务器的语言环境设置可能在教义文档。
但是,由于 PHP 将内容转换为其他内容的特殊方式,如果数据库"10 Little Piggies"
在您假定的float
列中为您提供,那么从技术上讲,上面的映射将“起作用”,尽管这可能不是您想要的。
我不确定 Doctrine DBAL 是否可能执行其他检查以确保输入值作为数字具有某种意义。到达此函数的输入值也很可能取决于底层数据库驱动程序。
“仅适用于使用小数点作为分隔符的区域设置。” 此处的区域设置是指您的 PHP 代码的区域设置。只有当您的 PHP 代码使用 . 作为小数分隔符。有些地区的小数点分隔符是逗号(10,9 而不是 10.9)。使用逗号作为小数分隔符的语言环境格式不能与 Doctrine 的浮点类型正常工作。
如果您的浮点数是使用十进制逗号分隔符格式化的语言环境,您可以使用 NumberFormatter 类中的 parse 方法重新格式化您的数字:http ://www.php.net/manual/en/numberformatter.parse.php
<?php
$fmt = new NumberFormatter( 'de_DE', NumberFormatter::DECIMAL );
echo $fmt->format(1234567.891234567890000)."\n";
$fmt = new NumberFormatter( 'it', NumberFormatter::SPELLOUT );
echo $fmt->format(1142)."\n";
?>