How can I simplify a fraction in PHP?
For instance, converting 40/100
to 2/5
.
The only way I could think of is to do a prime factorization on both numbers and compare like results, but I'm not really sure how to do that either.
We simplify fractions because it is always to work or calculate when the fractions are in the simplest form.
When you simplify a fraction, you divide the numerator and denominator by their greatest common divisor.
So all you need is to calcuate the GCD of the two numbers. There's no built-in function for that, but it's easy enough to implement the euclidean algorithm:
function gcd($a,$b) {
$a = abs($a); $b = abs($b);
if( $a < $b) list($b,$a) = Array($a,$b);
if( $b == 0) return $a;
$r = $a % $b;
while($r > 0) {
$a = $b;
$b = $r;
$r = $a % $b;
}
return $b;
}
Then just divide the top and bottom by that.
function simplify($num,$den) {
$g = gcd($num,$den);
return Array($num/$g,$den/$g);
}
var_export(simplify(40,100)); // Array(2,5)
If you have PHP gmp
extension, you can do this.
$num = 40;
$den = 100;
$gcd = gmp_intval(gmp_gcd((string)$num, (string)$den));
$new_num = $num / $gcd;
$new_den = $den / $gcd;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With