0

Y テキスト ボックスに 0 を入力しようとしたときに無限大記号を正しく表示するこの関数を作成しました。ただし、それでもゼロ除算エラーが発生します...これが私のコードです。

これはswitchステートメントの場合です

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

うーん

//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();
 }
4

5 に答える 5

2

最初: 2 行目のコードで除算を行っています (ゼロによる除算が可能です)。

2 番目: エラーをスローしているため、メソッドで false を返す必要はありません。

3番目:なぜここで例外を使用し、メソッドが真または偽を返すだけでなく、それをチェックしてから開発を実行するのか。

4 番目: $y の値のみを確認する必要がある場合にメソッドを使用する理由。メソッドの呼び出しまたは if ステートメントの組み込みに必要なコードは、どちらも 1 行だけです。

では、次のようにできないのはなぜですか。

case '/':                  
    if($y > 0)
        $prod = $x / $y;
    break; 
于 2011-10-26T14:33:58.670 に答える
0

あなたの論理は感じます...うーん、よく絡み合っています....これを見てください:

<?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";

?>
于 2011-10-26T14:36:06.610 に答える
0

私の場合、すべて正常に動作します。のように見えるので、スクリプトの早い段階で除算を使用しようとしていないことを確認してください。

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

関数呼び出しの前に開始します。

于 2011-10-26T14:36:22.710 に答える
0

除算の前に check0() を呼び出す必要があります。y == 0 の場合は FALSE、それ以外の場合は TRUE を返す必要があります。TRUE を返す場合は、除算を行います。ただし、これを行うためにメソッドを呼び出す必要はありません。

于 2011-10-26T14:37:07.497 に答える
0

これは、実際に ( のcase) 上部近くで除算を行うためです。

于 2011-10-26T14:30:08.777 に答える