intval が小数に遭遇すると 1 減るのはなぜですか?
$a = 2.3;
echo ($a*100);//出力 230
echo intval($a*100);//出力229
初めて使い始めたとき、何が起こっているのかわかりませんでした。
答えを見つける前に、次のように多くの情報を確認しました。
私たちが見たもの: 実際には 2.3。マシン内では次のようになります: 2.299999999... 理由は正確にはわかりません
つまり、2.3*100 は実際には 2.299999..*100=229.99...
次に intval がそれに作用し、小数部分が省略されます。 , したがって、230 ではなく 229 になります
しかし、マシン内では 1.0 も 1.0 であり、0.99999 ではないため、intval(1.0) は 1 のままです...
このメカニズムは小数点以降でのみ機能するはずです
お願いですマスターがこの魔法の問題を根本原因から説明してください
-----解決策---------------------- --------
printf ('%.16f', 2.3); //2.2999999999999998
基本的なコンピューターを学習しているときに 2 進数の 10 進数に関する章を読みませんでしたか知識?