intval が小数に遭遇すると 1 減るのはなぜですか?

WBOY
リリース: 2016-06-23 13:57:03
オリジナル
1362 人が閲覧しました

$a = 2.3;
echo ($a*100);//Output 230
echo intval($a*100);//Output 229
初めて使い始めたときは何が何だか分かりませんでした。物事
答えを見つける前に、次のように多くの情報を確認しました
私たちが見たこと: 2.3 は、実際にはマシン内で次のようになります: 2.299999999... 具体的な理由はわかりません
つまり、2.3*100 は実際には、マシンでは 2.299999..* 100=229.99...
その後、 intval がそれに作用し、小数部分が省略されるため、230 ではなく 229 になります
しかし、 intval(1.0) は、 1.0 も 1.0 であるため、 1 のままです。 0.99999 ではなく、マシンです。 ..
このメカニズムは小数点以降でのみ機能するはずです

この魔法の問題を根本原因から説明してください


ディスカッション (解決策) への返信

printf('%.16f', 2.3) ; //2.2999999999999998

コンピューターの基本知識を学ぶときに、2 進数の 10 進数に関する章を読みませんでしたか?

printf('%.16f', 2.3); //2.2999999999999998
コンピューターの基本知識を学んでいたとき、2 進数の 10 進数に関する章を読みませんでしたか?


授業中、小数部分にあまり注意を払っていませんでした
基本的なことをたくさん忘れていることに気づきました...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート