Робота з поплавками
Nette\Utils\Floats це статичний клас із корисними функціями для порівняння десяткових чисел.
Встановлення:
У всіх прикладах передбачається, що псевдонім уже створено:
Мотивація
Чому клас для порівняння поплавців, запитаєте ви? Я маю на увазі, я
можу використовувати оператори <
, >
, ===
і все
готово. Це не зовсім так. Як ви думаєте, що виведе цей код?
Якщо ви запустите цей код, деякі з вас здивуються, побачивши, що
програма друкує not same
.
Під час математичних операцій з десятковими числами помилки
виникають через перетворення десяткових чисел у двійкові. Наприклад,
0.1 + 0.2
виводить 0.300000000000000044…
. Тому під час проведення
порівнянь ми повинні допускати невелику розбіжність із певним
десятковим знаком.
Ось що робить клас Floats
. Наступне порівняння працюватиме так,
як очікується:
При спробі порівняти NAN
виникає виняток \LogicException
.
Клас Floats
менш толерантний до відмінностей, ніж
1e-10
. Якщо вам потрібно працювати з більшою точністю,
використовуйте замість нього бібліотеку BCMath.
Порівняння плаваючих значень
areEqual(float $a, float $b): bool
Повертає true
, якщо $a
= $b
.
isLessThan(float $a, float $b): bool
Повертає true
, якщо $a
< $b
.
isLessThanOrEqualTo(float $a, float $b): bool
Повертає true
, якщо $a
<= $b
.
isGreaterThan(float $a, float $b): bool
Повертає true
, якщо $a
> $b
застосовується .
isGreaterThanOrEqualTo(float $a, float $b): bool
Повертає true
, якщо $a
>= $b
.
compare(float $a, float $b): int
Якщо $a
< $b
, повертається -1
, якщо дорівнює
0
a pokud je $a
> $b
повертається 1
.
Може використовуватися, наприклад, з функцією usort
.
Допоміжні функції
isZero(float $value): bool
Повертає true
, якщо значення дорівнює нулю.
isInteger(float $value): bool
Повертає true
, якщо значення є цілим числом.