- abs: documentation ( source)
- floor: documentation ( source)
- explode: documentation ( source)
<?php
echo whole_fraction(23.54);
function whole_fraction($decimal){
$big_fraction = float2rat($decimal);
$num_array = explode('/', $big_fraction);
echo $big_fraction;
$numerator = $num_array[0];
$denomenator = $num_array[1];
echo $numerator;
echo $denomenator;
$whole_number = floor( $numerator / $denominator );
$numerator = $numerator % $denomenator;
$fraction = $whole_number . ' ' . $numerator . '/' . $denomenator;
}
function float2rat($n, $tolerance = 1.e-6) {
$h1=1; $h2=0;
$k1=0; $k2=1;
$b = 1/$n;
do {
$b = 1/$b;
$a = floor($b);
$aux = $h1; $h1 = $a*$h1+$h2; $h2 = $aux;
$aux = $k1; $k1 = $a*$k1+$k2; $k2 = $aux;
$b = $b-$a;
} while (abs($n-$h1/$k1) > $n*$tolerance);
return "$h1/$k1";
}