【发布时间】:2012-10-16 09:40:13
【问题描述】:
我正在使用一种方法来计算一些分数。这是以下方法:
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)
【问题讨论】:
-
您在
$score = ($difference / $houseattribute) * $maxscore;之前检查过吗?你完全确定在这条线上除以零吗? -
是的,我在该行之前检查了它。 Yii 在第 878 行给了我一个错误,即
$score = ($difference / $houseattribute) * $maxscore;所在的行。 -
你能试试
$score = ($difference / ($houseattribute + 1)) * $maxscore;吗? -
你想用
$houseattribute = (int) $name;完成什么这会将字符串转换为整数,结果为0。 -
@neworld 这有效并且不会导致错误。这是一种奇怪的行为,因为
$houseattribute不是 0。@Narretz$this->$name在此示例中返回字符串“3”,将其转换为 int 会给我 3。
标签: php divide-by-zero