fix: prevent division by zero by safeguarding zero float conversion in SAW calculations

This commit is contained in:
micko samawa 2026-06-28 13:44:16 +07:00
parent 675c05537e
commit ebddf558d3
1 changed files with 20 additions and 8 deletions

View File

@ -452,11 +452,17 @@ private function prosesMetodeSAWKontrakan($items, $kriteria, $customBobot = null
// Normalisasi based on tipe (Benefit/Cost)
if (strtolower($k->tipe) === 'benefit') {
$maxVal = $maxValues[$field] ?: 1;
$row['normalisasi'][$field] = (float)$nilai / (float)$maxVal;
$maxVal = (float)($maxValues[$field] ?? 1.0);
if ($maxVal == 0.0) {
$maxVal = 1.0;
}
$row['normalisasi'][$field] = (float)$nilai / $maxVal;
} else { // Cost
$minVal = $minValues[$field] ?: 1;
$row['normalisasi'][$field] = (float)$nilai > 0 ? (float)$minVal / (float)$nilai : 0;
$minVal = (float)($minValues[$field] ?? 1.0);
if ($minVal == 0.0) {
$minVal = 1.0;
}
$row['normalisasi'][$field] = (float)$nilai > 0 ? $minVal / (float)$nilai : 0;
}
}
@ -532,11 +538,17 @@ private function prosesMetodeSAWLaundry($items, $kriteria, $customBobot = null,
// Normalisasi based on tipe (Benefit/Cost)
if (strtolower($k->tipe) === 'benefit') {
$maxVal = $maxValues[$field] ?: 1;
$row['normalisasi'][$field] = (float)$nilai / (float)$maxVal;
$maxVal = (float)($maxValues[$field] ?? 1.0);
if ($maxVal == 0.0) {
$maxVal = 1.0;
}
$row['normalisasi'][$field] = (float)$nilai / $maxVal;
} else { // Cost
$minVal = $minValues[$field] ?: 1;
$row['normalisasi'][$field] = (float)$nilai > 0 ? (float)$minVal / (float)$nilai : 0;
$minVal = (float)($minValues[$field] ?? 1.0);
if ($minVal == 0.0) {
$minVal = 1.0;
}
$row['normalisasi'][$field] = (float)$nilai > 0 ? $minVal / (float)$nilai : 0;
}
}