Сравнение чисел с плавающей запятой обычно проблематично, так как есть проблемы с точностью. Есть дополнительные проблемы в порядке ваших утверждений if / elseif. Эти операторы будут выполняться сверху вниз, вводя только первый соответствующий блок. Я бы изменил ваш код следующим образом, чтобы округлить ваши значения, изменить порядок выражений if и сравнить их с <
или >=
:
$total_amount = round($row->total, 2);
$paid = round($row->paid_amount, 2);
if ($paid <= 0){
echo '<span class="label label-primary">Unpaid</span>';
} elseif ($paid < $total_amount) {
echo '<span class="label label-warning">Partial</span>';
} elseif ($paid >= $total_amount) {
echo '<span class="label label-success">Paid</span>';
}