デフォルトでは、mysqli はすべての値を文字列として返します。このMYSQLI_OPT_INT_AND_FLOAT_NATIVE
オプションを使用すると、int と float を適切な型に変換できます。これは小数フィールドには影響しませんが。
手動で呼び出すことなく、すべての小数フィールドを PHP float 型に自動的にキャストする方法はあり$value = (float) $row->some_decimal_field
ますか?
この問題を解決するために 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);
本当の問題は、なぜ 10 進文字列の型を変換する必要があるのかということです。数学で使用しようとしている場合は、php が自動的に変換を行います。10 進文字列は、同じ値を持つ float と同等です。簡単なテストを次に示します。
$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