我无法弄明白我犯了哪些错误。简单地说,我想在for循环中打印$ i变量的值。
但它没有打印任何东西。为了确保$fms
,$tecsol
等变量被打印出来并且它们具有值。请参阅下文。
0.6
1.8
2.7
2.5
2.5
2
0.5
3
以下是for循环的代码。
function sortCatergory(){
//assigning return values to variable , return value is an average which is =< 5
echo $econ=func_Economics();
echo '</br>';
echo $fms=func_FMS();echo '</br>';
echo $tecsol=func_Technology_Solutions();echo '</br>';
echo $math=func_Mathematics();echo '</br>';
echo $stat=func_Statistics();echo '</br>';
echo $quant=func_Quant_Equity();echo '</br>';
echo $gensoft=func_General_Software_Programming();echo '</br>';
echo $dataprod=func_Data_Products();echo '</br>';
for($i=5; $i>0.1; $i=$i-.1){
//echo $i.'</br>';
if($econ==$i){
echo $i.'</br>';
}
if($fms==$i){
echo $i.'</br>';
}
if($tecsol==$i){
echo $i.'</br>';
}
if($math==$i){
echo $i.'</br>';
}
if($stat==$i){
echo $i.'</br>';
}
if($quant==$i){
echo $i.'</br>';
}
if($gensoft==$i){
echo $i.'</br>';
}
if($dataprod==$i){
echo $i.'</br>';
}
}
}
这里echo $i.'<br>'
没有打印任何内容。但我希望在相同时再次打印相同的结果。
我做错了什么?
答案 0 :(得分:1)
我尝试了你的代码,这对我有用 请尝试这个($ econ ==(string)$ in){echo $ i。''; }
答案 1 :(得分:0)
您正在使用浮动数字,因此您无法信任==
比较。您可以使用方法
if (round($a - $b, 2) == 0) {
或
if (abs($a - $b) < 0.001) {
或
if (round($a, 2) == round($b, 2)) {
或
if ((int) ($a * 100) == (int) ($b * 100)) {
答案 2 :(得分:0)
我不确定但它可能与浮点不精确有关
尝试使用'bccomp',让我们知道你得到了什么结果。
答案 3 :(得分:0)
我的猜测是数字是你的敌人。
请尝试以下操作:在开始时输入您的数字。
由于您有两个十进制值,我建议:
$i = (int) $i*100;
$econ = (int) $econ*100;
其他变量也一样。 现在你有了可以安全比较的整数。
答案 4 :(得分:0)
你应该读一下浮动比较。
来自php manual:
比较花车
如上面的警告中所述,测试浮点值的相等性是有问题的,因为它们在内部表示的方式。但是,有一些方法可以比较浮点值,这些值可以解决这些限制。
要测试浮点值是否相等,使用由于舍入引起的相对误差的上限。此值称为机器epsilon或单位舍入,是计算中可接受的最小差异。
$epsilon = 0.00001; // this is precision
if(abs($econ-$i) < $epsilon){
echo $i.'</br>';
}
上面的代码可以正常工作
答案 5 :(得分:0)
这里的问题看起来像函数输出的值(存储在变量中)不会返回正确的值。
建议是:
1)确保将函数的返回值精确舍入到小数点后1位。
2)尝试通过删除if条件来每次打印变量值。