Funkcije Floats
Nette\Utils\Floats je statični razred z uporabnimi funkcijami za primerjavo števil float.
Namestitev:
Vsi primeri predpostavljajo, da je definiran naslednji vzdevek razreda:
Motivacija
Se sprašujete, čemu je namenjen razred za primerjavo float? Uporabite lahko operatorje <
, >
,
===
, si mislite. To ni povsem res. Kaj mislite, da se bo izpisala ta koda?
Če boste zagnali kodo, boste nekateri presenečeni, da je program natisnil not same
.
Matematične operacije s float števili povzročajo napake zaradi pretvorbe med desetiškim in dvojiškim sistemom. Na primer
0.1 + 0.2
je enako 0.300000000000000044…
. Zato moramo pri primerjanju plavajočih števil dopuščati
majhno razliko od določenega decimalnega mesta.
In to počne razred Floats
. Naslednja primerjava bo delovala po pričakovanjih:
Ko poskuša primerjati NAN
, pa vrže izjemo \LogicException
.
Razred Floats
dopušča razlike, manjše od 1e-10
. Če morate delati z večjo
natančnostjo, uporabite knjižnico BCMath.
Primerjava floatov
areEqual(float $a, float $b): bool
Vrne true
, če je $a
= $b
.
isLessThan(float $a, float $b): bool
Vrne true
, če je $a
< $b
.
isLessThanOrEqualTo(float $a, float $b): bool
Vrne true
, če $a
<= $b
.
isGreaterThan(float $a, float $b): bool
Vrne true
, če je $a
> $b
.
isGreaterThanOrEqualTo(float $a, float $b): bool
Vrne true
, če $a
>= $b
.
compare(float $a, float $b): int
Če je $a
< $b
, vrne -1
, če sta enaka, vrne 0
and if $a
> $b
vrne 1
.
Uporablja se lahko na primer s funkcijo usort
.
Pomožne funkcije
isZero(float $value): bool
Vrne true
, če je vrednost enaka nič.
isInteger(float $value): bool
Vrne true
, če je vrednost celo število.