elseif语句不起作用?

时间:2016-05-15 08:53:18

标签: php

我根据小数部分值写一个逻辑来舍入值。当我执行此代码时,elseif块不会执行。这是我的代码

<?php

    function roundRating($rating)
   {

    if($rating>=5 && $rating<0){
             $rating=0;
         }

        $a=(int)$rating/1;
        $b= $rating-$a;

        if(($b>=.1) && ($b<=.2)){
            $b=0;
            $rating=$a;
        }
        elseif(($b>=.3 && $b<=.4)|| ($b>=.6 && $b<=.7)){
            $b=.5;
            $rating=$a+$b;
        }
        elseif(($b>=.8) && ($b<=.9)){
            $b=1;
            $rating=$a+$b;
            $a=$rating;
        }
        else{}


         return $rating;       
   }

  echo  roundRating(3.3);
?>

对于此值3.3,输出应为3.5。但目前它将返回通过值3.3而不是3.5。请帮助我找出上面代码中的问题。提前致谢。

6 个答案:

答案 0 :(得分:1)

我已经完成了我自己的功能版本,它可能更干净,我认为会产生所需的输出:

{{1}}

答案 1 :(得分:1)

请按照以下代码给出bellow.we有时候会面临浮动值比较的问题。因此,指定小数点后我们将考虑多少数字是有用的。在下面的代码中,b的值被指定为小数点后只需要3个数字。

详情请访问: is-floating-point-math-broken

要在线查询,请访问: Online check     

    function roundRating($rating)
   {

    if($rating>=5 && $rating<0){
             $rating=0;
         }

        $a=(int)$rating/1;
        $b= sprintf('%3f',$rating-$a);

        if(($b>=.1) && ($b<=.2)){
            $b=0;
            $rating=$a;
        }
        elseif(($b>=.3 && $b<=.4)|| ($b>=.6 && $b<=.7)){
            $b=.5;
            $rating=$a+$b;
        }
        elseif(($b>=.8) && ($b<=.9)){
            $b=1;
            $rating=$a+$b;
            $a=$rating;
        }
        else{}


        return $rating;       
   }

   echo roundRating(3.3); // 3.5
?>

答案 2 :(得分:0)

浮点数在C中具有隐藏/有限精度 - 因此您无法将它们信任到最后一位数。在http://php.net/manual/en/language.types.float.php

上有更多关于此的文章

如果你将它四舍五入到小数点后1位,你将获得3.5:

$b= round($rating-$a, 1);

答案 3 :(得分:0)

用以下代码替换您的代码。

    <span class="nombre">
      <span>Nombre</span>
      <span><strong>lastname</strong></span>
    </span>

这里我做了两次更改,首先添加其他条件,如果$ rating不大于5或小于0,则为您的评级计算工作;如果条件是下面给出的更改,则在您的其中一个中为第二个。

.username .nombre {width: 75px; display: inline-block; text-align: right; margin-right: 10px;}
.glyphicon { vertical-align: top; padding-top: 15px; }
.glyphicon:first-child { padding-top: 10px}

我希望它会对你有所帮助。

答案 4 :(得分:0)

首先:

if($rating>=5 && $rating<0)

总是假的。 variable不能同时大于5且小于0.

关于

elseif(($b>=.3 && $b<=.4)|| ($b>=.6 && $b<=.7)){
        $b=.5;
        $rating=$a+$b;
    } 

它会带来什么实际差异:

elseif(($b>=.3 && $b<=.7)){
        $b=.5;
        $rating=$a+$b;
    }

除非你写:

else{
     $rating+=some_value;// forthe inifinite number of values between .4 & .6?
}

关于,

elseif(($b>=.8) && ($b<=.9)){
        $b=1;
        $rating=$a+$b;
        $a=$rating; // This statement is redundant
    }

由于您从函数返回$rating$a=$rating;是多余的。

说完上面的内容之后,我觉得下面会有一个更简单的实现,结果几乎与想要的结果相同:

<?php
function round_rating($rating){

    if($rating<0 || $rating>5){
        $rating=0;
        return $rating;
    }
    $t_rating=(int)$rating; //$t_rating short for trimmed_rating :)
    $dif=$rating-$t_rating; //$dif is the short for difference :)

    if($dif <= .2){
        return($t_rating);
    }
    elseif($dif <= .7){
        return((float)$t_rating+.5);
    }
    else{
        return((float)$t_rating+1); 
    }
} // round_rating function ends here :)

 /*Test time*/

 printf("Round rating for %0.2f : %0.2f\n",6,round_rating(6));
 printf("Round rating for %0.2f : %0.2f\n",0.2,round_rating(0.2));  
 printf("Round rating for %0.2f : %0.2f\n",1.4,round_rating(1.4));      
 printf("Round rating for %0.2f : %0.2f\n",2.8,round_rating(2.8));
 printf("Round rating for %0.2f : %0.2f\n",4.6,round_rating(4.6));
 printf("Round rating for %0.2f : %0.2f\n",-1,round_rating(-1));        

?>

输出:

Round rating for 6.00 : 0.00
Round rating for 0.20 : 0.00
Round rating for 1.40 : 1.50
Round rating for 2.80 : 3.00
Round rating for 4.60 : 4.50
Round rating for -1.00 : 0.00

答案 5 :(得分:0)

谢谢大家的回答。最后我得到了答案。这是我的答案。

function roundRating($rating)
   {
   if($rating>5 ){
        $rating=0;
        return $rating;   
    }
    elseif($rating<=0)
    {
        $x=0;
        return $rating;   
    }
    $a=(int)$rating/1;
    $b= $rating-$a;

    $b= (int)round(($b*10),0); 

      if($b<=2)
      {
          $rating=$a;
            return $rating;   
      }
      elseif($b>=3 && $b<=7){
          $rating=$a+.5;
            return $rating;   
      }
      elseif($b>=8){
          $rating=$a+1;
            return $rating;   
      }
      else{}
}


echo roundRating(3.2); //3
echo roundRating(3.3); //3.5
echo roundRating(3.7);  //3.5
echo roundRating(3.8); //4