Php 条件don'中的变量值;t在foreach循环中打印
我想不出我在哪里犯了这个错误。简单地说,我想在for循环中打印$I变量的值。 但是它没有打印任何东西。为确保打印了Php 条件don'中的变量值;t在foreach循环中打印,php,for-loop,Php,For Loop,我想不出我在哪里犯了这个错误。简单地说,我想在for循环中打印$I变量的值。 但是它没有打印任何东西。为确保打印了$fms,$tecsol和etc变量,并且这些变量具有相应的值。请参见下文 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 ec
$fms
,$tecsol
和etc变量,并且这些变量具有相应的值。请参见下文
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>';
}
}
}
函数sortCatergory(){
//将返回值赋给变量时,返回值是=<5的平均值
echo$econ=func_Economics();
回音“”;
echo$fms=func_fms();echo'';
echo$tecsol=func_Technology_Solutions();echo'';
echo$math=func_Mathematics();echo'';
echo$stat=func_Statistics();echo'';
echo$quant=func_quant_Equity();echo'';
echo$gensoft=func_General_Software_Programming();echo'';
echo$dataprod=func_Data_Products();echo'';
对于($i=5;$i>0.1;$i=$i-.1){
//回显$i.';
如果($econ==$i){
回显$i.';
}
如果($fms==$i){
回显$i.';
}
如果($tecsol==$i){
回显$i.';
}
如果($math==$i){
回显$i.';
}
如果($stat==$i){
回显$i.';
}
如果($quant==$i){
回显$i.';
}
如果($gensoft==$i){
回显$i.';
}
如果($dataprod==$i){
回显$i.';
}
}
}
这里是echo$i.“不打印任何内容。但我希望在它们相等时再次打印相同的结果。
我哪里做错了?您使用的是浮点数,因此无法信任比较。你们可以用这个方法来比较它们
if (round($a - $b, 2) == 0) {
或
或
您使用的是浮点数,因此无法信任比较。你们可以用这个方法来比较它们
if (round($a - $b, 2) == 0) {
或
或
我不确定,但这可能与浮点不精确有关
尝试使用“bccomp”,让我们知道您得到了什么结果。我不确定,但可能与浮点不精确有关
尝试使用“bccomp”,让我们知道你得到了什么结果。我猜数字是你的敌人 尝试以下方法:在开始时铸造数字 由于您有两个十进制值,我建议您:
$i = (int) $i*100;
$econ = (int) $econ*100;
其他Var也一样。
现在你有了可以安全比较的整数。我猜这里的数字是你的敌人 尝试以下方法:在开始时铸造数字 由于您有两个十进制值,我建议您:
$i = (int) $i*100;
$econ = (int) $econ*100;
其他Var也一样。
现在您有了可以安全比较的整数。您应该阅读有关浮点比较的内容 发件人: 比较浮动 如上警告所述,由于浮点值在内部的表示方式,测试浮点值是否相等是有问题的。但是,有一些方法可以绕过这些限制对浮点值进行比较 为了测试浮点值是否相等,使用舍入引起的相对误差上限。该值称为机器ε或单位舍入,是计算中可接受的最小差值
$epsilon=0.00001;//这是精确性
if(绝对值($econ-$i)<$epsilon){
回显$i.';
}
上面的代码将正常工作您应该阅读有关浮动比较的内容 发件人: 比较浮动 如上警告所述,由于浮点值在内部的表示方式,测试浮点值是否相等是有问题的。但是,有一些方法可以绕过这些限制对浮点值进行比较 为了测试浮点值是否相等,使用舍入引起的相对误差上限。该值称为机器ε或单位舍入,是计算中可接受的最小差值
$epsilon=0.00001;//这是精确性
if(绝对值($econ-$i)<$epsilon){
回显$i.';
}
上述代码正常您这里的问题看起来像是函数输出的值(存储在变量中)没有返回正确的值 建议如下: 1) 确保函数的返回值精确地四舍五入到小数点后1位
2) 每次尝试打印变量的值,方法是删除要调试的if条件。这里的问题似乎是函数输出的值(存储在变量中)没有返回正确的值 建议如下: 1) 确保函数的返回值精确地四舍五入到小数点后1位
2) 每次尝试打印变量的值,方法是删除要调试的if条件。我尝试了您的代码,这对我很有效 请试试这个 如果($econ==(字符串)$i) { 回音$i';
}我尝试了你的代码,这对我很有用 请试试这个 如果($econ==(字符串)$i) { 回音$i';
}根据您的值(
$stat
,$quant
)等的计算方式,您可能会遇到浮点精度问题。我建议首先使用或(|
)运算符将多个if
语句转换为单个if
语句以增加可读性。是的,我会这样做,但实际上这里的问题是什么?根据您的值($stat
,$quant
)等的计算方式,您可能会遇到浮点精度问题。我建议首先使用或(|
)将多个if
语句转换为单个if
语句运算符以提高可读性。是的,我会这样做,但实际上这里有什么问题?这些数字是在循环之前打印的,我认为这不是精度问题。请尝试一下。数字四舍五入
$i = (int) $i*100;
$econ = (int) $econ*100;
$epsilon = 0.00001; // this is precision
if(abs($econ-$i) < $epsilon){
echo $i.'</br>';
}