默认情况下,mysqli以字符串形式返回所有值,MYSQLI_OPT_INT_AND_FLOAT_NATIVE
选项允许您将int和float转换为适当的类型。尽管这不影响小数位数。在PHP中以字符串形式返回的MySQL小数位字段
有没有办法自动将所有十进制字段转换为php浮点类型,而无需手动调用$value = (float) $row->some_decimal_field
?
默认情况下,mysqli以字符串形式返回所有值,MYSQLI_OPT_INT_AND_FLOAT_NATIVE
选项允许您将int和float转换为适当的类型。尽管这不影响小数位数。在PHP中以字符串形式返回的MySQL小数位字段
有没有办法自动将所有十进制字段转换为php浮点类型,而无需手动调用$value = (float) $row->some_decimal_field
?
我非常怀疑它。小数使用固定点数学,并且PHP中没有可以提供这种数据类型的数据类型。浮动接近,但它们实际上是圆形的,这意味着将浮点数赋值为2可能导致1.99999999999999999。因此,即使MySQL提供了一种将小数转换为PHP浮点数的方法,您也有可能通过从小数转换为浮点数来丢失数据。
如何干净地处理这个问题,你需要像GMP,但正如你可能已经猜到MySQL不能自动地提供给你的。您将需要在PHP中手动执行此操作。
这里是东西,你可以用PHP做来解决这个问题:
function string_to_float($foo){
if($foo*1==$foo && !empty($foo)){
return $foo*1;
} else {
return $foo;
}
}
string_to_float($row->some_decimal_field);
真正的问题是,为什么你需要转换的十进制字符串类型?如果你想在数学中使用它,PHP会自动为你进行转换。由于十进制字符串等同于具有相同值的浮点数。下面是一个简单的测试:
$foo = "1.2";
$bar = 1.2;
if($foo===$bar){
$equivalent = "is";
} else {
$equivalent = "is not";
}
print '"1.2" '.$equivalent.' equal to 1.2 in type and value<br />';
if($foo==$bar){
$equivalent = "is";
} else {
$equivalent = "is not";
}
print '"1.2" '.$equivalent.' equal to 1.2 in value<br />';
$foo = "1.2"*1;
$bar = 1.2;
if($foo===$bar){
$equivalent = "is";
} else {
$equivalent = "is not";
}
print '"1.2"*1 '.$equivalent.' equal to 1.2 in type and value<br />';
将返回:
"1.2" is not equal to 1.2 in type and value
"1.2" is equal to 1.2 in value
"1.2"*1 is equal to 1.2 in type and value
您将铸造一个固定点数据类型为浮点数据类型,如果你做任何数学上使用正常运营的字符串。如果您不使用上述GMP,您会得到奇怪的结果或奇怪的数字近似值。 –
确定您的权利,它可能不是正确的答案,但它是一个答案,可以帮助别人寻找这样做。 – amaster