<?php
echo (int) ((0.1 + 0.7) * 10);
なぜこの出力7が期待ではなく出力されるの8ですか?
コメントで述べたように。のようなものとして保存されている0.1 + 0.7わけではありません。にキャストすると、小数点以下が切り捨てられて 7 が出力されます。 にキャストしないと、切り捨てられず、期待値が出力されます。0.80.79999999intint
echo (0.1 + 0.7);
echo ((0.1 + 0.7) * 10);
echo (int) ((0.1 + 0.7) * 10);
出力:
0.8
8
7
PHP ガイドの浮動小数点数に関する非常に大きな警告に注意してください。それはあなたが尋ねている正確な例です。
int切り捨ての問題を回避するには、指定された精度で を使用しround()ます
echo round(0.09+0.7,1)*10;
8
round()orint()の場合に単に省略した場合とは異なり、これにより整数が得られます。
echo (0.09+0.7)*10;
7.9