当公式相同时,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