7

デフォルトでは、mysqli はすべての値を文字列として返します。このMYSQLI_OPT_INT_AND_FLOAT_NATIVEオプションを使用すると、int と float を適切な型に変換できます。これは小数フィールドには影響しませんが。

手動で呼び出すことなく、すべての小数フィールドを PHP float 型に自動的にキャストする方法はあり$value = (float) $row->some_decimal_fieldますか?

4

2 に答える 2

0

この問題を解決するために 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
于 2013-08-21T16:46:04.140 に答える