Треки
/
Elixir
Elixir
/
Салабус
/
Числа з плаваючою комою
Чи

Числа з плаваючою комою у Elixir

8 вправ

Про концепцію Числа з плаваючою комою

В Elixir є два різні типи чисел: цілі числа та числа з плаваючою комою.

Числа з плаваючою комою мають одну або більше цифр після десяткового розділювача. Вони використовують 64-бітний формат з плаваючою комою подвійної точності.

float = 3.45
# => 3.45

Elixir також підтримує наукову нотацію для чисел з плаваючою комою.

1.25e-2
# => 0.0125

Помилки округлення

Числа з плаваючою комою відомі своїми помилками округлення.

0.1 + 0.2
# => 0.30000000000000004

Однак такі помилки не є особливістю Elixir. Вони трапляються в усіх мовах програмування. Це тому, що всі дані в наших компʼютерах зберігаються й обробляються як двійковий код. У двійковій системі точно можна подати лише ті дроби, знаменник яких можна виразити як 2^n (наприклад, 1/4, 3/8, 5/16). Інші дроби подаються як наближення.

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

Дізнатися більше про цю проблему можна на 0.30000000000000004.com. На сторінці Float Toy є гарне графічне пояснення того, як біти числа з плаваючою комою перетворюються на фактичне значення з плаваючою комою.

Порівняння

Цілі числа та числа з плаваючою комою можна вважати рівними (==), якщо вони мають однакове значення. Однак, оскільки це різні типи, вони ніколи не є строго рівними (===).

1 == 1.0
# => true

1 === 1.0
# => false

Перетворення

Цілі числа та числа з плаваючою комою можна змішувати в одному арифметичному виразі. Якщо у виразі використати число з плаваючою комою, результат теж буде числом з плаваючою комою.

2 * 3
# => 6

2 * 3.0
# => 6.0

Числа з плаваючою комою можна округлити (round), округлити вгору (ceil) або округлити вниз (floor).

Щоб округлити число з плаваючою комою й отримати число з плаваючою комою, можна скористатися функціями з модуля Float (Float.round, Float.ceil, Float.floor). Щоб натомість отримати ціле число, можна скористатися функціями з модуля Kernel (round, ceil, floor).

Ще один спосіб перетворити число з плаваючою комою на ціле число - відкинути його дробову частину за допомогою trunc.

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Числа з плаваючою комою

Практика заблокована

Розблокуйте ще 4 вправи, щоб практикувати концепцію Числа з плаваючою комою