MySQL十进制字段在PHP中作为字符串返回

lsj*_*rts 5 php mysql string casting decimal

默认情况下,mysqli将所有值作为字符串返回,该MYSQLI_OPT_INT_AND_FLOAT_NATIVE选项允许您将int和float转换为适当的类型.虽然这不会影响十进制字段.

有没有办法自动将所有十进制字段强制转换为php浮点类型而无需手动调用$value = (float) $row->some_decimal_field

Jer*_*oek 6

我非常怀疑。小数使用定点数学,并且 PHP 中没有数据类型可以提供这一点。浮点数接近,但实际上是四舍五入的,这意味着将 2 分配给浮点数可能会导致 1.99999999999999999。因此,即使 MySQL 提供了一种将小数转换为 PHP 浮点数的方法,您也可能因将小数点转换为浮点数而导致数据丢失。

为了干净地处理这个问题,你需要像GMP这样的东西,但你可能猜到 MySQL 不能自动为你提供它。您需要在 PHP 中手动执行此操作。

  • 答案是正确的 (+1),但是值 2 的示例不正确。常见的 IEEE 754 浮点表示([PHP 使用](http://php.net/manual/en/language.types.float.php))可以精确表示 2。一个更好的例子是 0.1,它不能被精确地表示并且更像是 0.10000000000000009 (2认同)