Solved

# PHP Math equation problem

Posted on 2011-03-02
356 Views
Hi - I'm programming in PHP.  Here is some YTD information:
2011 YTD 14,989.3 2,877,688.8 \$73,101.97
2010 YTD 18,409.8 1,911,203.4 \$52,875.36
YTD Change Down 1.228% Up 1.506% Up 1.383%

The YTD Change % looks incorrect to me.  This is the formula I'm using to calculate the percentage.  I know you mathematical people will be horrified but I never did very well in math. :(  Help!

Thanks - Zack
``````if (\$LMTDYYYAVG100 > \$CMTDYYYAVG100) { \$chMTDAVG100="<font color=red>Down " . number_format((\$LMTDYYYAVG100/\$CMTDYYYAVG100)*1, 3) . "%</font>"; } else { \$chMTDAVG100="<font color=green>Up " . number_format((\$CMTDYYYAVG100/\$LMTDYYYAVG100)*1, 3) . "%</font>"; }
if (\$LMTDYYYJet > \$CMTDYYYJet) { \$chMTDJet="<font color=red>Down " . number_format((\$LMTDYYYJet/\$CMTDYYYJet)*1, 3) . "%</font>"; } else { \$chMTDJet="<font color=green>Up " . number_format((\$CMTDYYYJet/\$LMTDYYYJet)*1, 3) . "%</font>"; }
if (\$LMTDYYYSPI > \$CMTDYYYSPI) { \$chMTDSPI="<font color=red>Down " . number_format((\$LMTDYYYSPI/\$CMTDYYYSPI)*1, 3) . "%</font>"; } else { \$chMTDSPI="<font color=green>Up " . number_format((\$CMTDYYYSPI/\$LMTDYYYSPI)*1, 3) . "%</font>"; }
``````
0
Question by:zack4x4
• 4
• 2

LVL 37

Accepted Solution

TommySzalapski earned 500 total points
The numbers are actually right, just the interpretation is off.
1.228 means you have currently 1.228 times last year, so that's a 22.8% increase.
If you get .9 then that's a 10% decrease. Take your number, subtract 1 and multiply by 100.
So (ThisYear/LastYear - 1)*100 gives the percentage change.
0

LVL 37

Expert Comment

For down, the formula is a little reversed. Basically, you just subtract from 1 instead of subtracting 1.
(1 - ThisYear/LastYear)*100
0

LVL 37

Expert Comment

I'll attempt to fix the code to show what I mean (I'm not the best at PHP so here goes):
``````if (\$LMTDYYYAVG100 > \$CMTDYYYAVG100) { \$chMTDAVG100="<font color=red>Down " . number_format((1 - \$LMTDYYYAVG100/\$CMTDYYYAVG100)*100, 3) . "%</font>"; } else { \$chMTDAVG100="<font color=green>Up " . number_format((\$CMTDYYYAVG100/\$LMTDYYYAVG100 - 1)*100, 3) . "%</font>"; }
if (\$LMTDYYYJet > \$CMTDYYYJet) { \$chMTDJet="<font color=red>Down " . number_format((1 - \$LMTDYYYJet/\$CMTDYYYJet)*100, 3) . "%</font>"; } else { \$chMTDJet="<font color=green>Up " . number_format((\$CMTDYYYJet/\$LMTDYYYJet - 1)*100, 3) . "%</font>"; }
if (\$LMTDYYYSPI > \$CMTDYYYSPI) { \$chMTDSPI="<font color=red>Down " . number_format((1 - \$LMTDYYYSPI/\$CMTDYYYSPI)*100, 3) . "%</font>"; } else { \$chMTDSPI="<font color=green>Up " . number_format((\$CMTDYYYSPI/\$LMTDYYYSPI - 1)*100, 3) . "%</font>"; }
``````
0

LVL 4

Author Closing Comment

That worked perfectly!!  Thanks!!  Just one question why do you have to -1 (subtract 1) from the back or from the front?  What does it do to the answer?

Apprecaite it!
Thanks!
0

LVL 37

Expert Comment

The number you generate is the ratio of the new number to the old number. To see the change, you subtract the old number. It's the same as (new - old)/old. With a little algebra, you can see that they are identical.
If you lost 10%, this would actually give you a value of -10% gain. But you want to show the number as positive, so we flip it - (new - old)/old = (-new + old)/old = (old - new)/old = 1 - new/old.
I just short cut the algebra.
0

LVL 4

Author Comment

Thanks for the explanation! I'm horrific in algebra. :(

Zack
0

## Join & Write a Comment Already a member? Login.

Author Note: Since this E-E article was originally written, years ago, formal testing has come into common use in the world of PHP.  PHPUnit (http://en.wikipedia.org/wiki/PHPUnit) and similar technologies have enjoyed wide adoption, making it possib…
Have you ever thought of installing a power system that generates solar electricity to power your house? Some may say yes, while others may tell me no. But have you noticed that people around you are now considering installing such systems in their …
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to count occurrences of each item in an array.

#### 728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!