2012-09-13 13 views
7

¿Cómo puedo simplificar una fracción en PHP?Simplificar una Fracción

Por ejemplo, convirtiendo 40/100 en 2/5.

La única forma en que podría pensar es hacer una factorización principal en ambos números y comparar resultados similares, pero tampoco estoy seguro de cómo hacer eso.

+3

¿Qué tal esta función? Http://forrst.com/posts/PHP_simplify_fraction-9rg – user1477388

Respuesta

20

Al simplificar una fracción, divide el numerador y el denominador por su máximo divisor común.

Así que todo lo que necesita es calcular el GCD de los dos números. No hay ninguna función integrada para eso, pero es bastante fácil de poner en práctica el 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; 
} 

A continuación, sólo dividen la parte superior e inferior por eso.

function simplify($num,$den) { 
    $g = gcd($num,$den); 
    return Array($num/$g,$den/$g); 
} 
var_export(simplify(40,100)); // Array(2,5) 
1

El algoritmo es bastante simple:

  • extracto de ambos valores de una cadena.
  • encuentran su máximo común divisor ($ mcd) (con Euclidean algorithm, por ejemplo)
  • divide ambos valores por $ mcd
  • reconstruir la cadena con los valores encontrados
2

Si tiene PHP gmp extensión, puede hacer esto.

$num = 40; 
$den = 100; 
$gcd = gmp_intval(gmp_gcd((string)$num, (string)$den)); 

$new_num = $num/$gcd; 
$new_den = $den/$gcd; 
Cuestiones relacionadas