Swift ofrece dos categorías principales de números: los enteros y los números de punto flotante.
0, 1, -1, 42 y -273.0.0, 3.14 y -1.36969e-10.Puedes insertar guiones bajos en los literales numéricos para mejorar la legibilidad: 1_000_000 es idéntico a 1000000.
Los literales de punto flotante se pueden escribir en notación decimal o exponencial.
En la mayoría de los casos, usas Int para los enteros y Double para los números de punto flotante:
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 ofrece operadores aritméticos estándar para hacer cálculos numéricos:
| Operador | Descripción | Ejemplo |
|---|---|---|
+ |
Suma |
4 + 6 da como resultado 10
|
- |
Resta |
15 - 10 da como resultado 5
|
* |
Multiplicación |
2 * 3 da como resultado 6
|
Swift tiene tipado seguro y no permite mezclar distintos tipos numéricos en las operaciones aritméticas.
No puedes sumar ni multiplicar directamente un Int y un Double; primero debes convertir uno de los tipos para que coincida con el otro.
El operador / realiza la división.
Cuando ambos operandos son enteros, la división entera descarta cualquier residuo fraccionario:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Dividir un número de punto flotante distinto de cero entre cero da como resultado inf o -inf.
Dividir 0.0 entre 0.0 produce nan (no es un número).
En cambio, dividir un entero entre cero provoca un error en tiempo de compilación o en tiempo de ejecución:
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
El operador de residuo (%) calcula el residuo que queda después de dividir dos enteros:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
En Swift, % es un verdadero operador de residuo y no un operador de módulo.
El resultado siempre toma el signo del primer operando (el dividendo), sin importar el signo del segundo operando:
5 % -2 // 1
-5 % 2 // -1
Puedes redondear un número de punto flotante con el método rounded().
Por defecto, rounded() redondea al entero más cercano.
También puedes indicar una regla de redondeo específica, como .up o .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
Cuando declaras una constante o una variable numérica sin una anotación de tipo, Swift infiere su tipo:
Int por defecto.Double por defecto.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Para hacer operaciones entre valores de distintos tipos, convierte un valor con inicializadores de tipo como Double(_:) o 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)
En este ejercicio, escribirás código para ayudar a un freelancer a comunicarse con un gerente de proyecto. Tu tarea es proporcionar algunas utilidades para calcular rápidamente tarifas diarias y mensuales, opcionalmente con un descuento dado.
Primero establecemos algunas reglas entre el freelancer y el gerente de proyecto:
A veces, el freelancer ofrece aplicar un descuento sobre su tarifa diaria (por ejemplo, para sus clientes más leales o para clientes sin fines de lucro).
Los descuentos se modelan como números fraccionarios que representan porcentajes, por ejemplo, 25.0 (25%).
Implementa una función llamada dailyRateFrom para calcular la tarifa diaria a partir de una tarifa por hora como parámetro.
El contrato define que un día tiene 8 horas facturables.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
La tarifa diaria devuelta debe ser un Double.
Implementa una función monthlyRateFrom para calcular la tarifa mensual con descuento.
Recibe dos parámetros: una tarifa por hora y el descuento en porcentaje.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
La tarifa mensual devuelta debe redondearse hacia arriba (tomando el techo) al entero más cercano.
Implementa una función workdaysIn que recibe un presupuesto, una tarifa por hora y un descuento, y calcula cuántos días completos de trabajo cubren eso.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
El número de días devuelto debe redondearse hacia abajo (tomando el piso) al entero siguiente.
Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.