Funciones flotantes
Nette\Utils\Floats es una clase estática con funciones útiles para comparar números flotantes.
Instalación:
Todos los ejemplos asumen que el siguiente alias de clase está definido:
Motivación
¿Te preguntas para qué sirve una clase de comparación float? Puedes utilizar los operadores <
,
>
, ===
, pensará usted. Esto no es del todo cierto. ¿Qué crees que imprimirá este código?
Si ejecuta el código, algunos de ustedes se sorprenderá de que el programa impreso not same
.
Las operaciones matemáticas con números flotantes provocan errores debidos a la conversión entre los sistemas decimal y
binario. Por ejemplo 0.1 + 0.2
equivale a 0.300000000000000044…
. Por lo tanto, al comparar números
flotantes, debemos tolerar una pequeña diferencia a partir de un determinado decimal.
Y eso es lo que hace la clase Floats
. La siguiente comparación funcionará como se espera:
Al intentar comparar NAN
, lanza una excepción \LogicException
.
La clase Floats
tolera diferencias inferiores a 1e-10
. Si necesita trabajar con más
precisión, utilice en su lugar la biblioteca BCMath.
Comparación de flotadores
areEqual(float $a, float $b): bool
Devuelve true
si $a
= $b
.
isLessThan(float $a, float $b): bool
Devuelve true
si $a
< $b
.
isLessThanOrEqualTo(float $a, float $b): bool
Devuelve true
si $a
<= $b
.
isGreaterThan(float $a, float $b): bool
Devuelve true
si $a
> $b
.
isGreaterThanOrEqualTo(float $a, float $b): bool
Devuelve true
si $a
>= $b
.
compare(float $a, float $b): int
Si $a
< $b
, devuelve -1
, si son iguales devuelve 0
and if
$a
> $b
devuelve 1
.
Puede utilizarse, por ejemplo, con la función usort
.
Funciones de ayuda
isZero(float $value): bool
Devuelve true
si el valor es cero.
isInteger(float $value): bool
Devuelve true
si el valor es entero.