[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 392
  • Last Modified:

PHP Math equation problem

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>"; }

Open in new window

0
zack4x4
Asked:
zack4x4
  • 4
  • 2
1 Solution
 
TommySzalapskiCommented:
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
 
TommySzalapskiCommented:
For down, the formula is a little reversed. Basically, you just subtract from 1 instead of subtracting 1.
(1 - ThisYear/LastYear)*100
0
 
TommySzalapskiCommented:
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>"; }

Open in new window

0
Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

 
zack4x4Author Commented:
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
 
TommySzalapskiCommented:
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
 
zack4x4Author Commented:
Thanks for the explanation! I'm horrific in algebra. :(

Zack
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now