intdiv () не работает должным образом - PullRequest
0 голосов
/ 22 мая 2018

Я использую эту функцию, но результат не соответствует ожидаемому

function getyearly($monthly, $yearly)
    {
        if(!empty($monthly) && $monthly!='0' && !empty($yearly) && $yearly!='0')
        {
            $permonth = intdiv((int)$yearly, 12);
            $monthlytoyear = (int)$monthly*12;
            $aftersub = $monthlytoyear - (int)$yearly;
            $afterdiv = intdiv((int)$aftersub, (int)$yearly);
            // $finaly = (int)$afterdiv*100;
            return "$ " . $yearly . "/year ($" . round($permonth) . "/month; save ~" . (int)$afterdiv . "%)";
        } else {
            return '$ '.$yearly.'/yearly';
        }
    }

Я получаю ноль (0).

1 Ответ

0 голосов
/ 22 мая 2018

intdiv() - неправильный инструмент для этой последней работы.

Результатом деления будет число с плавающей запятой, которое intdiv преобразуется в 0.

Код: ( Демо )

function getyearly($monthly, $yearly) {
    if(!empty($monthly) && !empty($yearly)) {
        $permonth=intdiv((int)$yearly, 12);
        echo "Single payment will feel like 12-monthly payments of: $permonth (" , $permonth *12 . ")\n";
        $monthlytoyear=(int)$monthly*12;
        echo "Making monthly payments will actually come to: $monthlytoyear\n";
        $aftersub = $monthlytoyear-$yearly;
        echo "That is a difference of: $aftersub\n";
        $afterdiv = $aftersub / $yearly;
        echo "In other words, a savings of: " , $afterdiv , "\n";
        $finaly=(int)($afterdiv*100);
        return "$ ".$yearly."/year ($".round($permonth)."/month; save ~{$finaly}%)";
    } else {
        return '$ '.$yearly.'/yearly';
    }

}
$monthly='60';
$yearly= '480'; 

echo getyearly($monthly,$yearly);

Вывод:

Single payment will feel like 12-monthly payments of: 40 (480)
Making monthly payments will actually come to: 720
That is a difference of: 240
In other words, a savings of: 0.5
$ 480/year ($40/month; save ~50%)
...