0
<?php
function neglogic($x,$y)
{
    if ($x<0.0 &&  $y>=0.0 )
    {
        $p1=("1");
    }
    elseif ($x<<0.0 &&  $y<<0.0 )
    {
        $p1=($x/$y);
    }
    if ($x==0.0 &&  $y>=0.0 )
    {
        $p1=("1");
    }
    elseif ($x==0.0 &&  $y<0.0 )
    {
        $p1=("0.05");
    }
    if ($x>0.0 && $y <=0.0)    
    { 
        $p1=("0.20");
    }
    elseif($x>0.0 && $y >0.0)
    {
        $q1=($x-$y);

        if ($q1>=0)
        {
            $p1=("0.20");
        }
        if ($q1<0)
        {
            $p1=("1.0");
        }
    }
    return $p1;
}
?>

这是它工作正常的脚本,但我注意到它对于(-1 到 -0.001)之间的值失败。

请尝试下面的第二个(-.8,-2)失败,说 $pq 未定义。

我知道我可以在开头定义 $p1 ,但我想知道为什么第二个数字会失败。

<?php
echo neglogic(-8,-2);
?>
<?php
echo neglogic(-0.8,-2);
?>
4

2 回答 2

2

elseif ($x<<0.0 && $y<<0.0 )

"<<" 并不意味着比 PHP 少。意思是左移。

你的意思是左移0位吗?还是您的意思是测试少于<

http://www.php.net/manual/en/language.operators.bitwise.php

如果"<<"在代码中,它是有效的代码,会导致意外行为。即一个错误。由于左移 0 位什么都不做,如果 x 和 y 在转换为布尔值时都为真,则 if 变为 if ($x && $y) 。根据 PHP 文档,0 和各种类似的值都是假的,其他的都是真的。因此,只要 x 和 y 存在并且非零或两者都为“真”,则 bug 后面的子句就会执行。特别是 if 子句可以在 x 或 y 为正时执行,因为正值是 true,如果您认为测试小于 0,那将是意外行为。

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

于 2013-04-29T23:01:24.063 回答
1

这段代码中有很多很奇怪的样式,但是跳出来最多的一个是:

 elseif ($x<<0.0 &&  $y<<0.0 )

你真的是说<<- 这是按位左移运算符,并且由于它已作为移位传递 0 ,所以它什么都不会。

你的意思是<,小于比较?

于 2013-04-29T23:01:16.093 回答