【PHP】string数字をfloat数値にキャストすると0になってしまう原因が分からない

実現したいこと

文字型数字を数値に変換したい。その際、0にならずに変換できるようにしたい。

発生している問題

キャストしようとするとなぜか要素1番目だけが0になってしまいます。

該当のソースコード

PHP

1$tmp = ['‎27.6', '8.7', '2.2'];2Log::info($tmp);3 4$tate = (float)$tmp[0];5$yoko = (float)$tmp[1];6$height = (float)$tmp[2];7Log::info('['.$tate.']');8Log::info('['.$yoko.']');9Log::info('['.$height.']');

この時の結果が以下の通りです。
[2023-11-15 17:30:23] local.INFO: array (
0 => '‎27.6',
1 => '8.7',
2 => '2.2 ',
)
[2023-11-15 17:30:23] local.INFO: [0]
[2023-11-15 17:30:23] local.INFO: [8.7]
[2023-11-15 17:30:23] local.INFO: [2.2]

試したこと

こうしても、

$tate = $tmp[0] * 1; Log::info('['.$tate.']');

0になってしまいます。


試しに[0]に別の値を入れてみると、うまくいきます。

$tmp[0] = $tmp[2]; $tate = (float)$tmp[0]; $yoko = (float)$tmp[1]; $height = (float)$tmp[2]; DD::info('['.$tate.']'); DD::info('['.$yoko.']'); DD::info('['.$height.']'); [2023-11-15 17:32:53] local.INFO: [2.2] [2023-11-15 17:32:53] local.INFO: [8.7] [2023-11-15 17:32:53] local.INFO: [2.2]

[0]を別の要素に入れてみると

$tmp[1] = $tmp[0]; $tate = (float)$tmp[0]; $yoko = (float)$tmp[1]; $height = (float)$tmp[2]; DD::info('['.$tate.']'); DD::info('['.$yoko.']'); DD::info('['.$height.']'); [2023-11-15 17:35:20] local.INFO: [0] [2023-11-15 17:35:20] local.INFO: [0] [2023-11-15 17:35:20] local.INFO: [2.2]

となります。


試しに、[0]の先頭に数字を加えると、元々tmp[0]に入っていたはずの「'‎27.6'」の値が消えてしまいます。

$tmp[0] = '90000'.$tmp[0]; $tate = (float)$tmp[0]; $yoko = (float)$tmp[1]; $height = (float)$tmp[2]; DD::info('['.$tate.']'); DD::info('['.$yoko.']'); DD::info('['.$height.']'); [2023-11-15 17:37:14] local.INFO: [90000] [2023-11-15 17:37:14] local.INFO: [8.7] [2023-11-15 17:37:14] local.INFO: [2.2]

なぜこのような現象になるのでしょうか?

補足情報(FW/ツールのバージョンなど)

php -v
Cannot load Xdebug - it was already loaded
PHP 8.0.25 (cli) (built: Oct 25 2022 10:49:29) ( ZTS Visual C++ 2019 x64 )
Copyright (c) The PHP Group
Zend Engine v4.0.25, Copyright (c) Zend Technologies
with Xdebug v3.2.1, Copyright (c) 2002-2023, by Derick Rethans

php artisan -V
Cannot load Xdebug - it was already loaded
Laravel Framework 8.83.27

コメントを投稿

0 コメント