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ó.


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

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

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


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

Sí, tienes razón, pero mi enfoque estaba en fabs , discúlpame
Hamed
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.