Swift - Convertir a valor absoluto

190

¿Hay alguna manera de obtener un valor absoluto de un entero?
por ejemplo

-8  
to  
 8

Ya intenté usar UInt () suponiendo que convertirá el Int a un valor sin signo, pero no funcionó.

Niko Adrianus Yuwono
fuente
8
Cast / Convert nunca debe usarse para cambiar el valor
Bryan Chen

Respuestas:

413

La abs()función estándar funciona muy bien aquí:

let c = -8
print(abs(c))
// 8
BS
fuente
Buena información hombre! ¡Gracias! Aceptaré la respuesta después de 10 minutos :)
Niko Adrianus Yuwono
¿Qué se debe importar para usar abs ()?
Jarrod Smith
3
@JarrodSmith: import Foundation
Adrian
3
Puede importar Darwin o Foundation
YYamil
¿No es Darwin parte de la Fundación?
Marin
38

Con Swift 5, puede usar una de las dos formas siguientes para convertir un número entero a su valor absoluto.


# 1 Obtener el valor absoluto de una Intde magnitudepropiedad

IntTiene una magnitudepropiedad. magnitudetiene la siguiente declaración:

var magnitude: UInt { get }

Para cualquier valor numérico x, x.magnitudees el valor absoluto de x.

El siguiente fragmento de código muestra cómo usar la magnitudepropiedad para obtener el valor absoluto en una Intinstancia:

let value = -5
print(value.magnitude) // prints: 5

# 2 Obtener el valor absoluto de un método Intfromabs(_:)

Swift tiene una función numérica global llamada abs(_:)método. abs(_:)tiene la siguiente declaración:

func abs<T>(_ x: T) -> T where T : Comparable, T : SignedNumeric

Devuelve el valor absoluto del número dado.

El siguiente fragmento de código muestra cómo usar abs(_:)la función global para obtener el valor absoluto en una Intinstancia:

let value = -5
print(abs(value)) // prints: 5
Imanou Petit
fuente
print (abs (Int.min)) no funcionará. ¿Hay alguna solución para Swift 3? Todavía no he actualizado mi proyecto.
bibscy
3
Oportunidad perdida de decir "obtener el valor absoluto en una posición Int "
LinusGeffarth
1
@bibscy Consulte la explicación de Apple para comprender por qué abs(Int8.min)no puede funcionar y, por lo tanto, crea un error de desbordamiento.
Imanou Petit
7

Si desea forzar un número a cambiar o mantenerlo positivo.
Aquí está el camino:

abs() for int
fabs() for double
fabsf() for float
Sourabh Kumbhar
fuente
fabs está en desuso
Chewie The Chorkie
2

Si desea obtener un valor absoluto de un doble o Int, use fabsfunc:

var c = -12.09
print(fabs(c)) // 12.09
c = -6
print(fabs(c)) // 6
Hamed
fuente
Sí, tienes razón, pero mi enfoque estaba en fabs , discúlpame
Hamed