2013-04-29 74 views
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); 
?> 
+0

使用首先适当缩进。然后停止用双引号括起浮动值。并注意'<<'不是比较运算符。 – mario 2013-04-29 23:00:49

+1

它应该做什么? – Tchoupi 2013-04-29 23:01:02

+0

我想elseif($ x << 0.0 && $ y << 0.0)是不正确的 – bestprogrammerintheworld 2013-04-29 23:01:54

回答

1

有这个代码很多很奇怪的风格,但跳出大部分之一是:

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

你真的是<< - 这是按位左移运算符,因为它已经通过0作为转变,那么它什么都不会。

您的意思是<,用于比较?

2

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

“< <” 并不意味着小于PHP。这意味着左移。

你的意思是左移0位吗?还是你的意思是考不到<

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

如果"<<"是在代码中,它是有效的代码,会导致意外的行为。即错误。因为左移0位什么也不做,所以if变成if($ x & & $ y),如果x和y都转换为布尔值时为真,则返回true。根据PHP文档,0和各种类似的值是错误的,而其他所有内容都是正确的。因此,只要x和y存在且非零或者两者都为“true”,就会执行bug后面的子句。尤其是,如果当x或y为正子句可以执行,因为正值是真实的,那就是意外的行为,如果你认为你在测试小于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

+0

测试不到! – user2300435 2013-04-29 23:07:12

+0

@ user2300435我添加了一些解释 – Paul 2013-04-29 23:12:34