Jump to content


Photo

Division by zero


  • Please log in to reply
2 replies to this topic

#1 canzo

canzo
  • New Members
  • Pip
  • Newbie
  • 2 posts

Posted 02 April 2006 - 04:16 AM

Hello,

I'm kind of new to programming in PHP. I'm trying to do a retirement calculator and I have it basicly completed. But I keep getting warnings about division by zero.

I tried to get this to work by making If statements so that if the certain optional variable is 0 then a formula without that variable will be executed. I'm getting very confused.

The goal of the script is to get $cf, $s, $fv, $ar, and $da; which is then echoed in an html template. If you can help, I would greatly appreciate it! Division by zero errors happen on lines 93, 94, 94, 103, 141, 151, 151.
Below is the entire snippit of code minus the html template.


<?

    if (($_POST[email] == "") || ($_POST[contact] == "")) {
    header('location: rrsp.html');
    exit;

}

//Determine income frequency
$e = 1;
    if ($_post[incomefreq] = "Annually") {
        $e = 1;
        }
    if ($_post[incomefreq] = "Semi-Annually") {
        $e = 2;
        }
    if ($_post[incomefreq] = "Quarterly") {
        $e = 4;
        }
    if ($_post[incomefreq] = "Monthly") {
        $e = 12;
        }
    if ($_post[incomefreq] = "Weekly") {
        $e = 52;
        }
    if ($_post[incomefreq] = "Bi-Weekly") {
        $e = 26;
        }        
//determine deposit frequency
    if ($_post[depositfreq] = "Annually") {
        $df = 1;
        }
    if ($_post[depositfreq] = "Semi-Annually") {
        $df = 2;
        }    
    if ($_post[depositfreq] = "Quarterly") {
        $df = 4;
        }    
    if ($_post[depositfreq] = "Monthly") {
        $df = 12;
        }    
    if ($_post[depositfreq] = "Weekly") {
        $df = 52;
        }        
    if ($_post[depositfreq] = "Bi-Weekly") {
        $df = 26;
        }            
        
//Put all Input POSTS into variables
if ($_POST[investrate] = 0) {
    $r = 0;
    } else {
    $r = ($_POST[investrate] / 100);
}
if ($_POST[inflation] = 0) {
    $i = 0;
    } else {
    $i = ($_POST[inflation] / 100);
    }

$c = $_POST[income];
$y = $_POST[yearsto];
$f = $_POST[inflate];
$yl = $_POST[tolast];
$current = $_POST[current];
$fd = $_POST[depositinflate];


//Part 1. The income required in future dollars


    $cf = $c * (1 + $i)^$y;

//where: 
//cf is the Income required with inflation
//c is the income required in todays dollars
//i s the inflation rate
//y is the years to retirement
    
//Part 2. The savings needed at retirement



    if ($f = "yes") {
            if ($r = $i) {
            $s = $cf * $yl * $e;
            }
            if ($r = 0) {
                    $s = $cf * $e * ((1 + $i)^$yl - 1)/$i;
            }
            if ($r >= 0) {
                $e = 1;
                $a = (1 - ((1 + $r)/$e)^(-e) ) / ($r / $e);
                $b = (1 - ((1 + $i) / ((1 + $r / $e)^$e))^$yl ) / (1 - (1 + $i) / ((1 + $r / $e)^$e));
                $s = $cf * (1 * $r / $e) * $a / $b;
            }
        }
                            
    if ($f = "no") {
            if ($r = 0) {
                $s = $cf * $yl * $e;
        } else {
                $s = $cf * ((1 - (1 + $r / $e)^(-$yl * $e)) / ($r / $e)) * (1 + $r / $e);
                }
        }

//Where:
//f is if income increases with inflation or not
//s is the total savings at retirement
//cf is the income required with inflation from Part 1.
//yl is the years funds are to last
//i is the inflation rate
//r is the investment rate 
//e is the income frequency, such as annual is 1, weekly is 52.

//Part 3. Inflated value of registered assets

        $fv = $current * (1+ $r)^($y);
//Where:
//fv is the future value of current savings
//r is the investment rate
//y is the years to retirement

//Part 4. Net Amount Required

    $ar = $s - $fv;
//Where:
//ar is the net amount required to reach goal
//s is the savings at retirement from Part 2
//fv is the future valule of current savings from Part 3

//Part 5. Amount of each deposit
    $rdf = $r / $df;
    $kdf = (1 + $rdf)^$df / (1 + $i);
    
    if ($fd = "yes") {
        if ($kdf = 1) {
            if ($rdf = 0) {
                $da = $ar / ($y * $df * (1 + $i)^($y));
                } else {
                    $da =  $ar / ($y * (1 + $i)^($y) * (1 + $rdf) * (1 - (1 + $rdf)^(-$df) ) / $rdf);
                    } 
        } else { 
        $da = $ar / (((($kdf)^($y) - 1) / ( $kdf - 1 )) * $kdf * (1 + $i)^($y) * (1 + $$rdf) * (1 - (1 + $rdf)^(-$df) ) / $rdf);
        }
        }
    if ($fd = "no") {
        if ($rdf = 0){
            $da = $ar / ($y * $df);
            } else {
            $da = $ar / ((((1 + $rdf)^($y * $df) - 1) / $rdf) * (1 + $rdf));
            }
            }
        
//Where:
//fd is if the deposits increase with inflation or not.
//i is the inflation rate
//r is the investment rate
//da is the deposit amount
//ar is the net amount required from Part 4.
//y is the years to retirement
//rdf is the rate associated with deposit frequency rdf = r / df
//kdf = (1+rdf)^df / (1+i)
//df is the deposit frequemcy such as annually is 1, weekly is 52.
?>

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>canzo</title>
<style fprolloverstyle>A:hover {color: #71552B}
</style>
</head>

<body style="font-family: Verdana; font-size: 10pt; color: #000000" link="#005BA6" vlink="#CC6600" alink="#71552B" bgcolor="#FFFFFF">



                <table border="0" width="100%" id="table7" cellspacing="0" cellpadding="0">
                    <tr>
                        <td>Thank you for completing the RRSP Calculator with 
                        canzo!&nbsp; You have been e-mailed the 
                        results to &lt;$email&gt;</td>
                    </tr>
                    <tr>
                        <td>Income Required in Future Dollars = <? echo "$cf"; ?></td>
                    </tr>
                    <tr>
                        <td>The Savings Needed at Retirement = <? echo "$s"; ?></td>
                    </tr>
                    <tr>
                        <td>Inflated Value of Registered Assets = <? echo "$fv"; ?> </td>
                    </tr>
                    <tr>
                        <td height="18">Net Amount Required = <? echo "$ar"; ?></td>
                    </tr>
                    <tr>
                        <td height="12">Amount of Each Deposit <? echo "$dfpost"; ?> = <? echo "$da"; ?></td>
                    </tr>
                    <tr>
                        <td height="11"><br>
                        If you have any questions, please contact us!</td>
                    </tr>
                </table>

</body>

</html>

Thanks,
Mark

#2 kenrbnsn

kenrbnsn
  • Staff Alumni
  • Advanced Member
  • 8,235 posts
  • LocationHillsborough, NJ, USA

Posted 02 April 2006 - 04:36 AM

In your "if" statements you need to use the double equal sign "==" for the comparison. You are using a single equal sign "=" which does an assignment, which succeeds so you're "if" statement takes the success path -- not what you intended.

You can get rid of the first two "if" statement blocks by using an array:
<?php
$freq = array('Annually'=>1, 'Semi-Annually'=>2, 'Quarterly'=>4, 'Monthly'=>12, 'Bi-Weekly'=>26, 'Weekly'=>52);
$e = 1;
$e = $freq[$_POST['incomefreq']];
$df = $freq[$_POST['depositfreq']];
?>

Ken

#3 canzo

canzo
  • New Members
  • Pip
  • Newbie
  • 2 posts

Posted 02 April 2006 - 05:01 AM

WOW! You're very fast. Thank you so much for your help! :D




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users