【问题标题】:Division by zero, php除以零,php
【发布时间】:2011-10-26 14:27:31
【问题描述】:

我创建了这个函数,当尝试在 Y 文本框中输入 0 时,它可以正确显示无穷大符号。但是我仍然得到零错误除法......这是我的代码。

这里是switch语句的情况

case '/':             
    $prod = $x / $y;     
    break;

hh

//check for divide by 0
function check0($y)
{
    if ($y == 0)
        throw new Exception ($prod = "&#8734");

    return FALSE;
 }

 try
 {
    check0($y);
    $prod = $x /$y;   
 }catch(Exception $zero){
     echo $zero->getMessage();
 }

【问题讨论】:

  • 代码实际上是如何组织的?我看到一个分界线,然后是一个break(顶部没有调用check0
  • 这一行是什么 $prod = $x / $y;休息前?是否被 try{...}catch{...} 包围?
  • 当前的答案涵盖了它,但还有一些额外的说明:为什么 Exception 构造函数中有赋值?此外,您不应该对控制流使用异常。只需使用 if 语句返回无穷大符号,而不是进行除法。
  • 你能发布你得到的错误吗?错误中应该有一个行号,它应该给你一个提示你有什么错误
  • 如果 $x 是负数怎么办?负无穷也是一种可能......

标签: php divide-by-zero


【解决方案1】:

第一:您在第二行代码处进行除法(可以除以零)。

第二:不需要在你的方法中返回 false,因为你正在抛出一个错误。

第三:为什么在这里使用异常,而不是让你的方法返回 true 或 false 并在执行 devision 之前检查它。

第四:如果你只需要检查 $y 的值,为什么还要有一个方法。调用方法或包含 if 语句都只需要一行代码。

那么,为什么不能这样:

case '/':                  
    if($y > 0)
        $prod = $x / $y;
    break; 

【讨论】:

    【解决方案2】:

    这是因为您实际上是在顶部附近进行除法(在case 中)。

    【讨论】:

      【解决方案3】:

      感觉你的逻辑……嗯,好纠结……下面看看这个:

      <?php
          function divide($x, $y) {
              if ( $y === 0 ) 
                  throw new Exception("Divide By Zero");
              return $x/$y;
          }
      
          try {
              $product = divide(3, 0);
          }
          catch(Exception $e) {
              if ( $e->getMessage() == "Divide By Zero" ) 
                  $product = "&#8734";
              else
                  $product = NULL;
          }
          print "Product is $product\n";
      
      ?>
      

      【讨论】:

        【解决方案4】:

        除法前必须调用 check0()。如果 y == 0,您应该返回 FALSE,否则返回 TRUE。 如果返回 TRUE 则进行除法。但是,不需要调用方法来执行此操作!

        【讨论】:

          【解决方案5】:

          就我而言,一切正常。请确保,您并没有尝试在脚本的早期使用除法,因为它看起来像。

          case '/':
          $prod = $x / $y;
          break;
          

          在您的函数调用之前开始。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-05
            • 1970-01-01
            相关资源
            最近更新 更多