3

いくつかのスコアを計算する方法を使用しています。これは次の方法です。

public function getIntScore($name, $int){
    switch ($name) {
        case "bedrooms":
            $maxscore = 15;
            break;
        case "living_size":
            $maxscore = 10;
            break;
        case "property_size":
            $maxscore = 10;
            break;
        case "date_of_construction":
            $maxscore = 3;
            break;
    }
    $houseattribute = (int) $this->$name;
    $difference = abs($houseattribute - $int);
    if ($difference == 0) {
        return $maxscore;
    }
    $score = ($difference / $houseattribute) * $maxscore;
    return round($score);
}

ただし、これにより「ゼロによる除算」エラーが発生します。計算する前に変数の値を確認しましたが、どれもゼロではありませんでした。

var_dump($difference, $houseattribute, $maxscore) 

出力:

int(2) int(3) int(15) 
4

2 に答える 2

1

空の値をテストしてください。

$houseattribute = (int) $this->$name;
if (empty($houseattribute)) {
   throw new Exception('House attribute is zero.');
}
于 2012-10-16T11:34:32.643 に答える
0

解決しました。私は愚かだったので、配列をループしていたことを忘れていました。最初の配列は$houseattributeでした3。配列内に is という項目がありました$houseattributeが、変数をダンプした後0に使用したため、それがexit;何であるかはわかりませんでした。正の整数に変更しましたが、機能していません。

于 2012-10-16T13:20:34.257 に答える