Solved

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

Posted on 2013-06-29
9
333 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
Secure Your WordPress Site: 5 Essential Approaches

WordPress is the web's most popular CMS, but its dominance also makes it a target for attackers. Our eBook will show you how to:

Prevent costly exploits of core and plugin vulnerabilities
Repel automated attacks
Lock down your dashboard, secure your code, and protect your users

 
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 500 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

[Live Webinar] The Cloud Skills Gap

As Cloud technologies come of age, business leaders grapple with the impact it has on their team's skills and the gap associated with the use of a cloud platform.

Join experts from 451 Research and Concerto Cloud Services on July 27th where we will examine fact and fiction.

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…
Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
The viewer will learn how to count occurrences of each item in an array.
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 …

636 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