驚くべきことに、受け入れられた答えはありません。この問題は 32 ビット PHP にのみ存在します。
ドキュメントから、
文字列に '.'、'e'、'E' のいずれの文字も含まれず、数値が整数型の制限 (PHP_INT_MAX で定義) に収まる場合、文字列は整数として評価されます。それ以外の場合はすべて、float として評価されます。
つまり、$string
は最初に INT として解釈され、オーバーフローが発生します ($string
値2968789218PHP_INT_MAX
は、 32 ビット PHPの最大値 ( ) である2147483647(float)
を超えます)。次に、またはによって float と評価されfloatval()
ます。
したがって、解決策は次のとおりです。
$string = "2968789218";
echo 'Original: ' . floatval($string) . PHP_EOL;
$string.= ".0";
$float = floatval($string);
echo 'Corrected: ' . $float . PHP_EOL;
出力:
Original: 2.00
Corrected: 2968789218
PHP が 32 ビットか 64 ビットかを確認するには、次の方法があります。
echo PHP_INT_MAX;
PHP が 64 ビットの場合は が出力され9223372036854775807
、それ以外の場合は が出力され2147483647
ます。