Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Simple PHP math problem trying to get a percentage and failing at it.

Posted on 2013-06-29
9
Medium Priority
?
339 Views
Last Modified: 2013-06-30
I'm sorry to have to ask. I should've listened up in math class:

I'm comparing open rates for 2 different email campaigns.

For example:
$current_campaign = 3
$previous_campaign = 2

So I'm trying to do the math to show what percentage of increase or decrease the current campaign has compared to the previous. Seemed simple enough when I started....

My math is:
$sent_percent = number_format(($previous_campaign / $current_campaign) * 100 - 100,0);
echo $sent_percent."%";

This echos out: -33% where based on the above it should actually be a 33% increase (no negative sign)

If I take out the '-100' in the formula, I get 67% but that isn't how much of an improvement the current campaign is compared to the previous. See what I mean?

This can't be that hard and I'm chalking it up to my inexperience and failure to take math seriously in high school.

Help...
0
Comment
Question by:tjyoung
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 3
9 Comments
 
LVL 15

Expert Comment

by:Giovanni Heward
ID: 39287188
Try...

$current_campaign = 3;
$previous_campaign = 2;
$sent_percent = round(( $current_campaign - $previous_campaign ) / abs( $current_campaign ) * 100, 2);
if (preg_match('/\A(\d+.\d{2})\Z/', $sent_percent)) {
	# Successful match
        echo "$sent_percent%";
} else {
	# Match attempt failed
        echo "Error...";
}

Open in new window

0
 
LVL 1

Author Comment

by:tjyoung
ID: 39287203
trying yours right now
0
 
LVL 15

Expert Comment

by:Giovanni Heward
ID: 39287205
Or...

<?php
$current_campaign = 3;
$previous_campaign = 2;
$sent_percent = round( ( $current_campaign - $previous_campaign ) / 
		abs( $current_campaign ) * 100, 0 );
if (preg_match('/\A(\d+)\Z/', $sent_percent)) {
	# Successful match
        echo "$sent_percent%";
} else {
	# Match attempt failed
        echo "Error...";
	unset($sent_percent);
}
?>

Open in new window

0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Author Comment

by:tjyoung
ID: 39287210
Hi,
The last version works fine when the current_campaign is a larger number.
I get the error when its less though. Can't figure out what the preg_match is doing?
0
 
LVL 58

Accepted Solution

by:
Gary earned 2000 total points
ID: 39287211
x66's calculations are wrong.

Initial figure / 100 - gives you what 1% represents (of the old campaign)
New figure divide by the (1%) - gives you the percentage of the new value (campaign)
Take away 100 gives you the actual increase/decrease.

So in math
$diff = (newcampaign / (oldcampaign/100)) - 100
0
 
LVL 58

Expert Comment

by:Gary
ID: 39287213
An increase from 2 to 3 is a 50% increase, not 33.3%.
0
 
LVL 1

Author Closing Comment

by:tjyoung
ID: 39287217
doh... it is 50% increase.
Thanks this works.
0
 
LVL 58

Expert Comment

by:Gary
ID: 39287222
:o)
You were working out the difference between the two numbers.
0
 
LVL 15

Expert Comment

by:Giovanni Heward
ID: 39289024
Good catch.

If you switch my variables around you get the gain; just another way to do it.

<?php
$current_campaign = 3;
$previous_campaign = 2;
$diff = round( ( $current_campaign - $previous_campaign ) /
            abs( $current_campaign ) * 100, 0 );
$gain = round( abs( ( $previous_campaign - $current_campaign ) /
            $previous_campaign ) * 100, 0 );
echo "diff: $diff% | ";
echo "gain: $gain%";
?>
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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…
3 proven steps to speed up Magento powered sites. The article focus is on optimizing time to first byte (TTFB), full page caching and configuring server for optimal performance.
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

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

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

Join & Ask a Question