3v4l.org

run code in 300+ PHP versions simultaneously
<?php function fractionToDecimal($fraction) { // Split fraction into whole number and fraction components preg_match('/^(?P<whole>\d+)?\s?((?P<numerator>\d+)\/(?P<denominator>\d+))?$/', $fraction, $components); // Extract whole number, numerator, and denominator components $whole = $components['whole'] ?: 0; $numerator = $components['numerator'] ?: 0; $denominator = $components['denominator'] ?: 0; // Create decimal value $decimal = $whole; $numerator && $denominator && $decimal += ($numerator/$denominator); return $decimal; } function decimalToFraction($decimal) { // Determine decimal precision and extrapolate multiplier required to convert to integer $precision = strpos(strrev($decimal), '.') ?: 0; $multiplier = pow(10, $precision); // Calculate initial numerator and denominator $numerator = $decimal * $multiplier; $denominator = 1 * $multiplier; // Extract whole number from numerator $whole = floor($numerator / $denominator); $numerator = $numerator % $denominator; // Find greatest common divisor between numerator and denominator and reduce accordingly $factor = gmp_intval(gmp_gcd($numerator, $denominator)); $numerator /= $factor; $denominator /= $factor; // Create fraction value $fraction = []; $whole && $fraction[] = $whole; $numerator && $fraction[] = "{$numerator}/{$denominator}"; return implode(' ', $fraction); } // Examples var_dump(fractionToDecimal('1/25')); var_dump(fractionToDecimal('2 3/4')); var_dump(fractionToDecimal('6/4')); var_dump(decimalToFraction(1.375)); var_dump(decimalToFraction(3)); var_dump(decimalToFraction(2.875));
Output for 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
float(0.04) float(2.75) float(1.5) string(5) "1 3/8" string(1) "3" string(5) "2 7/8"

preferences:
94.76 ms | 407 KiB | 5 Q