Skip to content

Instantly share code, notes, and snippets.

@slischka
Created December 13, 2018 21:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slischka/8183338a0edc0751fae1d2cbf11425f3 to your computer and use it in GitHub Desktop.
Save slischka/8183338a0edc0751fae1d2cbf11425f3 to your computer and use it in GitHub Desktop.
<?php
declare(strict_types = 1);
namespace Fapi\Helpers;
final class NumberHelper
{
/** @var float */
private static $epsilon = 1e-9;
/**
* @param int|float $value
* @return bool
*/
public static function isZero($value): bool
{
return \abs($value) < self::$epsilon;
}
/**
* @param int|float $value
* @return bool
*/
public static function isInteger($value): bool
{
return \abs(\floor($value) - $value) < self::$epsilon;
}
/**
* @param int|float $dividend
* @param int|float $divisor
* @return int|float
*/
public static function divide($dividend, $divisor)
{
if (self::isZero($divisor)) {
throw new DivisionByZeroException();
}
return $dividend / $divisor;
}
/**
* @param int|float $a
* @param int|float $b
* @return int
*/
public static function compare($a, $b): int
{
if (\abs($a - $b) < self::$epsilon) {
return 0;
}
return $a < $b
? -1
: 1;
}
/**
* @param int|float $a
* @param int|float $b
* @return bool
*/
public static function areEqual($a, $b): bool
{
return self::compare($a, $b) === 0;
}
/**
* @param int|float $a
* @param int|float $b
* @return bool
*/
public static function isLowerThan($a, $b): bool
{
return self::compare($a, $b) < 0;
}
/**
* @param int|float $a
* @param int|float $b
* @return bool
*/
public static function isLowerThanOrEqual($a, $b): bool
{
return self::compare($a, $b) <= 0;
}
/**
* @param int|float $a
* @param int|float $b
* @return bool
*/
public static function isGreaterThan($a, $b): bool
{
return self::compare($a, $b) > 0;
}
/**
* @param int|float $a
* @param int|float $b
* @return bool
*/
public static function isGreaterThanOrEqual($a, $b): bool
{
return self::compare($a, $b) >= 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment