Many years ago there was a popular hit song which said, "You can get all the things you seek, for a dollar down and a dollar a week." While this may be true to a certain degree, the prudent buyer would be wise to check the fine print before signing the contract.
I'm sure most of you have seen the commercial, "Get a new computer for just $35 per week for 52 weeks." If you check out what they are offering, you'll find you can get the same computer, printer, and FREE digital camera for about $650 total, by shopping the Internet, instead of 52*35, or $1,820 as advertised. Why? The sellers are catering to persons with bad credit or no credit and since they expect to take a loss on a few contracts, they more than double the actual price and make a whopping profit! But you already knew that, didn't you? You wouldn't fall for such a blatant ripoff, would you?
How about the more subtle credit payment plans? How do you figure exactly what you are paying? Simple, just use this Jim-Dandy Whiz Bang Time Payment Calculator.
'Loan calculator with GUI
'by Welopez, 1/30/2006
'NOMAINWIN
WindowWidth=360
WindowHeight=220
UpperLeftX=INT((DisplayWidth-WindowWidth)/2)
UpperLeftY=INT((DisplayHeight-WindowHeight)/2)
MENU #1, "Options", "Instructions", instr,_
"Print payments", [table], "Quit", [quit]
STATICTEXT #1.st1, "", 10, 25, 200, 20 'Add text in [new] branch
STATICTEXT #1.st2, "", 10, 55, 200, 20
STATICTEXT #1.st3, "", 10, 85, 200, 20
TEXTBOX #1.tb1, 220, 20, 100, 28
TEXTBOX #1.tb2, 220, 50, 100, 28
TEXTBOX #1.tb3, 220, 80, 100, 28
BUTTON #1.btn1, "Calc", [userValues], UL, 60, 130, 60, 24
BUTTON #1.btn2, "New", [new], UL, 140, 130, 60, 24
BUTTON #1.btn3, "Quit", [quit], UL, 220, 130, 60, 24
OPEN "Time Payment Calculator" FOR WINDOW AS #1
PRINT #1, "trapclose [quit]"
PRINT #1, "font comic_sans_ms 10"
[new]
PRINT #1.tb1, ""
PRINT #1.tb2, ""
PRINT #1.tb3, ""
PRINT #1.st1, "Amount you are borrowing..."
PRINT #1.st2, "Number of months to repay..."
PRINT #1.st3, "Interest rate? (EX: 7.5)..."
PRINT #1.tb1, "!setfocus";
WAIT
[userValues]
PRINT #1.tb1, "!contents? amt"
PRINT #1.tb2, "!contents? mon"
PRINT #1.tb3, "!contents? int"
[calculations] 'Check for valid input
IF (amt=0) OR (mon=0) OR (int=0) THEN NOTICE "Error! Error!"+CHR$(13)+_
"Insufficient data. Please try again." : GOTO [new]
IF int>1 THEN int=int/100 'If interest > 1, convert to decimal fraction
int=(int/12) 'Determine amount of monthly interest
pmt=amt*int/(1-(1+int)^(-1*mon)) 'Time payment equation
[results]
PRINT #1.st1, "Monthly payments will be..."
PRINT #1.tb1, "$"; USING("###.##",pmt) 'From the equation, payment amount
PRINT #1.st2, "Total cost of loan will be..."
PRINT #1.tb2, "$"; USING("#####.##",(pmt*mon)) 'Total of all monthly payments
PRINT #1.st3, "Total interest paid for loan..."
PRINT #1.tb3, "$"; USING("#####.##",(pmt*mon)-amt) 'Total of all interest paid
WAIT
[table]
CALL prynt amt, mon, int, pmt 'PRINT cannot be used as label or variable
WAIT
[quit]
CLOSE #1
END
SUB prynt amt, mon, int, pmt
PRINT "The amount financed is $ "; amt
PRINT "Payable in "; mon; " equal payments of $ "; USING("###.##", pmt)
PRINT "The annual interest charged is "; (int*1200);"%"
PRINT
PRINT "Pmt Nr"; TAB(15);"Interest"; TAB(30); "Principal"; _
TAB(45); "Balance"
FOR k=1 TO mon 'Number of payments
curInt=(amt*int) 'Calculate interest this payment
prin=(pmt-curInt) 'Calculate principal this payment
amt=(amt-prin) 'New balance = (balance-prin) for this payment
PRINT k; TAB(15); "$"; USING("####.##", curInt);_
TAB(30); "$"; USING("####.##", prin);_
TAB(45); "$"; USING("#####.##", amt)
NEXT k
PRINT
PRINT "Printing complete."
'DUMP
[noCalc]
END SUB
SUB instr
WindowWidth=400
WindowHeight=330
UpperLeftX=1
UpperLeftY=1
BUTTON #instr.default, "OK", [closeMe], UL, 180, 260, 40, 20
STATICTEXT #instr.st1, "", 20, 20, 360, 240
OPEN "Instructions" FOR DIALOG_modal AS #instr
PRINT #instr, "trapclose [closeMe]"
PRINT #instr, "font comic_sans_ms 10"
PRINT #instr.st1, "Enter the amount you are borrowing, "+_
"the number of months for the contract, and the interest "+_
"being charged, into the appropriate boxes."+CHR$(13)+CHR$(13)+_
"Press "+CHR$(34)+"Calc"+CHR$(34)+" for the results."+_
CHR$(13)+CHR$(13)+"DO NOT use this calculator for credit "+_
"card payments as the interest on credit cards is calculated "+_
"on a DAILY basis as opposed to MONTHLY for typical loans."+_
CHR$(13)+CHR$(13)+"Under "+CHR$(34)+"Options"+CHR$(34)+_
" press "+CHR$(34)+"Print payments"+CHR$(34)+_
" to print a loan amortization table. "+_
"Be sure your printer is online."
WAIT
[closeMe]
CLOSE #instr
END SUB
Run the code and enter the amount you wish to borrow, the number of months for the contract, and the interest charged. The results will give you your monthly payment, the total cost of the item you are purchasing, and the total amount of interest you will be paying. If you have good credit, you may get a very low interest rate. You can run the same loan amount for various contract lengths (1 year=12 months)
NOTE: This does not apply to credit card accounts! Credit cards are billed by calculating the daily interest rate times the number of days in the billing period. Most credit purchases of major items (automobiles, homes, RVs, etc) are billed on a monthly basis and 1/12th of the annual interest rate is applied to the bill for each month. If you are making a major purchase and the finance company wants to bill you in the same manner credit cards are billed, you would be well advised to get a bank loan instead! The same applies to in-store accounts, which are usually billed in the same fashion as credit cards. The difference can be hundreds, even thousands, of dollars for big ticket items.
Let's look at the code above. After creating a GUI, we get user input for amount, number of months, and interest rate. Many users will enter 7.5 as the interest rate, but for calculations we need the monthly rate. The first thing we do is check to see if any of the values were not entered and, if so, an error message appears. If all the values have been entered, we check to see if the interest rate is greater than 1, meaning the user entered 7.5, 9.9, or some value which is not a proper interest rate. If the value is less than 1, we'll assume the user knows what he or she is doing and accept the value. If not, we first divide by 100 to get a proper decimal fraction, and then divide by 12 to get the monthly interest rate.
Time payment purchases are governed by a simple, but powerful, equation used by financial institutions throughout the world. All we need is amount, time, and interest. Plugging those values into the equation, we can easily calculate the monthly payment. Knowing the amount paid each month, we can subtract the monthly interest from the payment and learn what portion of the payment reduces the debt, and what the new balance of the loan will be. For certain kinds of loans (primarily real estate), the results will be in the ball-park, but not exact because property taxes or insurance may be included in the payment, or periodically added to the payment.
Now that we know how much is being applied, and where it is being applied, we can print out an amortization schedule of the monthly payments. This is very useful if kept in a file and a note is made for each monthly payment. The amortization schedule for this program is called from SUB prynt. (I know, that's not even close to the correct spelling, but PRINT is a reserved word, and "prynt" still tells you what the SUB does.) You will know exactly what you have paid, and what the payoff balance should be. If your loan qualifies as a tax deduction, you can also compute the amount to be deducted in the present year.
Many JB users are not yet old enough to legally drive a vehicle, and many more are not yet eligible to legally obtain credit. By figuring the actual cost of your purchase, including interest, you will better be able to determine if that new motorcycle is a good buy. Most likely, you will be better off putting your money in the bank and letting them pay you interest until you have enough to pay cash. Knowing where your money goes will not make you any richer, but it will help you avoid foolish spending and how to manage your credit wisely.
NOMAINWIN and DUMP have been REMed out to allow you to observe changes without actually printing to paper. Change the PRINT commands in SUB prynt to LPRINT if you want to print a hard copy. When copying and pasting, watch for unintentional line breaks.