当公式相同时,PHP floor返回两个不同的Resultl? echo“2019年1月”; 回声“”; echo$basicValue=最低限额((250000/31)*31); 回声“”; echo$津贴=(30000/31)*31; 回声“”; echo$房屋租金=地板($津贴); 回声“”; echo“2019年2月”; 回声“”; echo$basicValue=最低限额((250000/28)*28); 回声“”; echo$津贴=(30000/28)*28; 回声“”; echo$house_rent=楼层(津贴);//这是返回29999,这是错误的???

当公式相同时,PHP floor返回两个不同的Resultl? echo“2019年1月”; 回声“”; echo$basicValue=最低限额((250000/31)*31); 回声“”; echo$津贴=(30000/31)*31; 回声“”; echo$房屋租金=地板($津贴); 回声“”; echo“2019年2月”; 回声“”; echo$basicValue=最低限额((250000/28)*28); 回声“”; echo$津贴=(30000/28)*28; 回声“”; echo$house_rent=楼层(津贴);//这是返回29999,这是错误的???,php,division,multiplication,floor,Php,Division,Multiplication,Floor,这是因为$allowment是一个浮点数,floor返回一个整数 对于预期结果,我建议使用round()对float值进行四舍五入 见: 输出: echo 'For the month of January-2019'; echo'<hr>'; echo $basicValue = floor((250000 / 31) * 31); echo '<br>'; echo $allowance = (30000 / 31) * 31; echo '<br>

这是因为
$allowment
是一个浮点数,
floor
返回一个整数

对于预期结果,我建议使用
round()
float
值进行四舍五入

见:

输出:

echo 'For the month of January-2019';
echo'<hr>';
echo $basicValue = floor((250000 / 31) * 31);

echo '<br>';

echo $allowance = (30000 / 31) * 31;
echo '<br>';
echo $house_rent=floor($allowance);
echo'<hr>';
echo 'For the month of February-2019';
echo'<hr>';
echo $basicValue = floor((250000 / 28) * 28);

echo '<br>';

echo $allowance = (30000 / 28) * 28;
echo '<br>';
echo $house_rent=floor($allowance); // This is return 29999 that is wrong???
是:


30000/28
的值不是整数,无法精确表示。出现小的舍入误差。计算机中表示的值略小于表达式的精确数学值。当乘以
28
时,结果略小于
30000
,并且
floor()
执行它应该执行的操作:忽略小数部分,只返回整数部分
29999


计算机中表示的
30000/28*28
值约为
29999.99999999963620211929082870

阅读有关浮点表示法以及使用它可能遇到的问题的更多信息:


这不是PHP或计算机中数字的浮点表示的问题。这也是现实生活中发生的事情


我们通常认为<代码> 1/3 是代码> 0…333333333333333…<代码>但是不管我们有多少个代码> 3 < /C> >在小数点之后,乘以<代码> 3 < /代码>不能产生正确的<代码> 1 < /代码> .< /p>阅读文档。code>php.net/+

floor
=:
根据需要通过向下舍入值返回下一个最低整数值(作为浮点值)。
echo 'For the month of January-2019';
echo "\n";
echo $basicValue = floor((250000 / 31) * 31);

echo "\n";

echo $allowance = (30000 / 31) * 31;
echo "\n";
var_dump($allowance);
$allowance = intval($allowance);
echo "\n";
var_dump($allowance);
echo "\n";
echo $house_rent=floor($allowance);
echo "\n";
echo 'For the month of February-2019';
echo "\n";
echo $basicValue = floor((250000 / 28) * 28);

echo "\n";

echo $allowance = (30000 / 28) * 28;
echo "\n";
var_dump($allowance);
$allowance = intval($allowance);
echo "\n";
var_dump($allowance);
echo $house_rent=floor($allowance); // This is return 29999 that is wrong???
For the month of January-2019
250000
30000
float(30000)

int(30000)

30000
For the month of February-2019
250000
30000
float(30000)

int(29999)
29999