1

Doctrine 文档在这里指出,对于float映射类型,区域设置是相关的:

- float:将 SQL 浮点数(双精度)映射到 PHP 双精度的类型。重要提示:仅适用于使用小数点作为分隔符的区域设置。

我假设这指的是 SQL 服务器的语言环境设置,但似乎没有更具体的文档,所以它阅读了源代码,运行一些测试,或者在这里询问,以防有人已经解决了这个问题。

4

2 回答 2

0

从教义 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 是否可能执行其他检查以确保输入值作为数字具有某种意义。到达此函数的输入值也很可能取决于底层数据库驱动程序。

于 2013-07-30T09:26:53.753 回答
0

“仅适用于使用小数点作为分隔符的区域设置。” 此处的区域设置是指您的 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";
?>
于 2013-10-21T10:31:18.850 回答