$step) { return TRUE; } // Now compute that remainder of a division by $step. $remainder = (double) abs($double_value - $step * round($double_value / $step)); // $remainder is a double precision floating point number. Remainders that // can't be represented with single precision floats are acceptable. The // fractional part of a float has 24 bits. That means remainders smaller than // $step * 2^-24 are acceptable. $computed_acceptable_error = (double) ($step / pow(2.0, 24)); return $computed_acceptable_error >= $remainder || $remainder >= ($step - $computed_acceptable_error); } /** * Generates a sorting code from an integer. * * Consists of a leading character indicating length, followed by N digits * with a numerical value in base 36 (alphadecimal). These codes can be sorted * as strings without altering numerical order. * * It goes: * 00, 01, 02, ..., 0y, 0z, * 110, 111, ... , 1zy, 1zz, * 2100, 2101, ..., 2zzy, 2zzz, * 31000, 31001, ... * * @param int $i * The integer value to convert. * * @return string * The alpha decimal value. * * @see \Drupal\Component\Utility\Number::alphadecimalToInt */ public static function intToAlphadecimal($i = 0) { $num = base_convert((int) $i, 10, 36); $length = strlen($num); return chr($length + ord('0') - 1) . $num; } /** * Decodes a sorting code back to an integer. * * @param string $string * The alpha decimal value to convert * * @return int * The integer value. * * @see \Drupal\Component\Utility\Number::intToAlphadecimal */ public static function alphadecimalToInt($string = '00') { return (int) base_convert(substr($string, 1), 36, 10); } }