Working with decimals

Seymore4Head Seymore4Head at Hotmail.invalid
Sat Aug 23 17:13:35 EDT 2014


On Sat, 23 Aug 2014 13:47:20 -0400, Seymore4Head
<Seymore4Head at Hotmail.invalid> wrote:

>I am trying to do this example:
>http://openbookproject.net/pybiblio/practice/wilson/loan.php
>The instructions warn that floating point math can get messy so I
>cheated a little bit to get me going.
>
>I made my program work by using numbers that wouldn't get messy.
>Instead of using 6% interest I used 10 and instead of using 12 months,
>I used 10.
>
>I managed to get it working and formatted just like they wanted it,
>but now I want to try to use any numbers.  It has been hard to figure
>out which method to use.
>
>Here is the working program.
>
>import sys
>count = 0
>payment = 0
>borrowed = 100
>rate = 10
>term = 10
>interest=borrowed*rate*.01     #(*1)
>balance = borrowed + interest
>print ("Loan calculator")
>print ("")
>print ("Amount borrowed: ", borrowed)
>print ("Interest rate: ", rate)
>print ("Term: (months)", term)
>print ("")
>print ("Amount borrowed:" , borrowed)
>print ("Total interest paid:" , interest)
>print ("")
>print ("")
>print ("            Amount      Remaining")
>print ("Pymt#        Paid        Balance")
>print ("-----       ------       ----------")
>while count <=term:
>
>
>    print (repr(count).rjust(3), repr(payment).rjust(13),
>repr(balance).rjust(14))
>
>
>    payment = (borrowed + interest)/term
>    balance = balance - payment
>    count = count + 1
>
>What should I use to make the formatting come out correctly when the
>program prints "payment" and "balance" using decimal format?
>
>If you change the "rate" from 10 to 6 and the "term" from 10 to 12,
>the screen gets very messy.
>
>Anyone care to suggest what method to use to fix the decimal format?

OK  I found the answer to my own question after getting search tips
here.

I found this function that I will be saving for later.
def make_it_money(number):
    import math
    return '$' + str(format(math.floor(number * 100) / 100, ',.2f'))

(I still need more practice to find out how it does what it does, but
I like the end result)

So I changed the line in question to:
 print (repr(count).rjust(3), make_it_money(payment).rjust(13),
make_it_money(balance).rjust(14))

So......now changing the rate from 10 to 6 and the term from 10 to 12
works fine.

I would still like to see other solutions if anyone wants to offer.

Thanks everyone



More information about the Python-list mailing list