wc_decimal_to_fraction( float $decimal )
Convert a decimal (e.g. 3.5) to a fraction (e.g. 7/2).
Description Description
From: https://www.designedbyaturtle.co.uk/2015/converting-a-decimal-to-a-fraction-in-php/
Parameters Parameters
- $decimal
-
(Required) the decimal number.
Return Return
(array|bool) a 1/2 would be [1, 2] array (this can be imploded with '/' to form a string).
Source Source
File: includes/wc-core-functions.php
function wc_decimal_to_fraction( $decimal ) {
if ( 0 > $decimal || ! is_numeric( $decimal ) ) {
// Negative digits need to be passed in as positive numbers and prefixed as negative once the response is imploded.
return false;
}
if ( 0 === $decimal ) {
return array( 0, 1 );
}
$tolerance = 1.e-4;
$numerator = 1;
$h2 = 0;
$denominator = 0;
$k2 = 1;
$b = 1 / $decimal;
do {
$b = 1 / $b;
$a = floor( $b );
$aux = $numerator;
$numerator = $a * $numerator + $h2;
$h2 = $aux;
$aux = $denominator;
$denominator = $a * $denominator + $k2;
$k2 = $aux;
$b = $b - $a;
} while ( abs( $decimal - $numerator / $denominator ) > $decimal * $tolerance );
return array( $numerator, $denominator );
}