Swift надає дві основні категорії чисел: цілі числа та числа з плаваючою комою.
0, 1, -1, 42 та -273.0.0, 3.14 та -1.36969e-10.У числові літерали можна вставляти підкреслення, щоб покращити читабельність: 1_000_000 - те саме, що 1000000.
Числові літерали з плаваючою комою можна записати в десятковій або експоненційній формі.
У більшості випадків для цілих чисел використовують Int, а для чисел з плаваючою комою - Double:
let speed: Int = 42 // Explicit Int
let pi: Double = 3.14 // Explicit Double
let giga: Double = 1_000_000_000 // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34 // Double in scientific notation
Swift надає стандартні арифметичні оператори для числових обчислень:
| Оператор | Опис | Приклад |
|---|---|---|
+ |
Додавання |
4 + 6 дає 10
|
- |
Віднімання |
15 - 10 дає 5
|
* |
Множення |
2 * 3 дає 6
|
Swift є типобезпечною мовою і не дозволяє змішувати різні числові типи в арифметичних операціях.
Не можна напряму додати чи помножити Int та Double; спершу потрібно перетворити один тип, щоб він відповідав іншому.
Оператор / виконує ділення.
Коли обидва операнди є цілими числами, цілочисельне ділення відкидає дробову остачу:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Ділення ненульового числа з плаваючою комою на нуль дає inf або -inf.
Ділення 0.0 на 0.0 дає nan (Not a Number).
Натомість ділення цілого числа на нуль спричиняє помилку під час компіляції або виконання:
print(5.0 / 0.0) // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0) // Prints nan
// The following line will not compile:
// print(5 / 0) // Error: Division by zero
Оператор остачі (%) обчислює остачу, що залишається після ділення двох цілих чисел:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
У Swift % - це справжній оператор остачі, а не оператор модуля.
Результат завжди має знак першого операнда (діленого), незалежно від знаку другого операнда:
5 % -2 // 1
-5 % 2 // -1
Округлити число з плаваючою комою можна методом rounded().
Типово rounded() округлює до найближчого цілого.
Можна також вказати конкретне правило округлення, як-от .up чи .down:
let x = 3.14
let y = x.rounded() // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up) // 4.0
Коли ми оголошуємо числову константу чи змінну без анотації типу, Swift виводить її тип:
Int.Double.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Щоб виконувати операції між значеннями різних типів, перетворюємо одне значення за допомогою ініціалізаторів типу, як-от Double(_:) чи Int(_:):
let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0
let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)
У цій вправі ми писатимемо код, який допоможе фрилансеру спілкуватися з менеджером проєкту. Ми надамо кілька допоміжних функцій, щоб швидко розраховувати денні та місячні ставки, за потреби зі знижкою.
Спершу встановімо кілька правил між фрилансером і менеджером проєкту:
Іноді фрилансер пропонує застосувати знижку до своєї денної ставки (наприклад, для найвідданіших клієнтів або неприбуткових організацій).
Знижки подаються як дробові числа, що позначають відсотки, наприклад 25.0 (25%).
Реалізуйте функцію dailyRateFrom, щоб обчислити денну ставку, де погодинна ставка передається як параметр.
За домовленістю день має 8 оплачуваних годин.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
Повернена денна ставка має бути Double.
Реалізуйте функцію monthlyRateFrom, щоб обчислити місячну ставку зі знижкою.
Вона приймає два параметри: погодинну ставку та знижку у відсотках.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
Повернену місячну ставку потрібно округлити вгору (взяти стелю) до найближчого цілого числа.
Реалізуйте функцію workdaysIn, яка приймає бюджет, погодинну ставку та знижку й обчислює, на скільки повних днів роботи цього вистачить.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Повернену кількість днів потрібно округлити вниз (взяти підлогу) до найближчого цілого числа.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Swift, а також 35 концепцій116 вправ та справжнє наставництво від людей, і все це безкоштовно.