Swift ofrece dos categorías principales de números: los números enteros y los números de coma 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 coma flotante pueden escribirse en notación decimal o exponencial.
En la mayoría de los casos, usarás Int para los números enteros y Double para los números de coma 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 proporciona los operadores aritméticos estándar para realizar 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 es de tipado seguro y no permite mezclar tipos numéricos diferentes en las operaciones aritméticas.
No puedes sumar ni multiplicar directamente un Int y un Double; antes debes convertir uno de los tipos para que coincida con el otro.
El operador / realiza la división.
Cuando ambos operandos son números enteros, la división entera trunca cualquier residuo fraccionario:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Dividir un número de coma 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 número entero entre cero provoca un error en tiempo de compilación o 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 números enteros:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
En Swift, % es un auténtico operador de residuo y no un operador de módulo.
El resultado siempre toma el signo del primer operando (el dividendo), independientemente del signo del segundo operando:
5 % -2 // 1
-5 % 2 // -1
Puedes redondear un número de coma flotante con el método rounded().
De forma predeterminada, rounded() redondea al número entero más cercano.
También puedes indicar una regla de redondeo concreta, 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 anotación de tipo, Swift infiere su tipo:
Int de forma predeterminada.Double de forma predeterminada.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Para realizar operaciones entre valores de tipos diferentes, convierte uno de los valores 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 vas a escribir código para ayudar a un freelance a comunicarse con sus clientes sobre los precios de determinados proyectos. Escribirás unas cuantas funciones de utilidad para calcular rápidamente los costes para los clientes.
Un cliente se pone en contacto con el freelance para preguntar por sus tarifas. El freelance explica que trabaja 8 horas al día. Sin embargo, el freelance solo conoce su tarifa por hora del proyecto. Ayúdale a estimar una tarifa diaria a partir de una tarifa por hora.
Implementa la función dailyRateFrom(hourlyRate:), que recibe el argumento hourlyRate, que contiene la tarifa por hora del freelance.
La función debe devolver la tarifa diaria basándose en la tarifa por hora.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
La tarifa diaria devuelta debe ser un Double.
A veces, un cliente está interesado en contratar al freelance durante un periodo más largo. El freelance está dispuesto a hacer un descuento al cliente, pero solo si el cliente lo contrata durante al menos un mes. En total hay 22 días laborables. Ayuda al freelance a calcular su tarifa mensual a partir de su tarifa por hora y el porcentaje de descuento sobre la tarifa fija que está dispuesto a aplicar, redondeado al número entero más cercano.
Implementa la función monthlyRateFrom(hourlyRate:withDiscount:), que recibe los argumentos hourlyRate, que contiene la tarifa por hora del freelance, y withDiscount, que contiene el descuento que el freelance está dispuesto a hacer al cliente.
La función debe devolver la tarifa mensual redondeada al número entero más cercano.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
Otro día, un jefe de proyecto le ofrece al freelance trabajar en un proyecto con un presupuesto fijo. Dado el presupuesto fijo y la tarifa por hora del freelance, ayúdale a calcular el número de días que trabajaría hasta agotar el presupuesto. Ten en cuenta que, en este caso, el freelance siempre está dispuesto a hacer el descuento, independientemente del número de días contratados. El resultado debe redondearse hacia abajo al número entero más cercano.
Implementa la función workdaysIn(budget:hourlyRate:withDiscount:), que recibe los argumentos:
budget, que contiene el presupuesto del proyecto.hourlyRate, que contiene la tarifa por hora del freelance.withDiscount, que contiene el descuento que el freelance está dispuesto a hacer al cliente.La función debe devolver el número de días laborables que el freelance trabajará en el proyecto, redondeado hacia abajo.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.