Swift - Convertir en valeur absolue

194

existe-t-il un moyen d'obtenir une valeur absolue à partir d'un entier?
par exemple

-8  
to  
 8

J'ai déjà essayé d'utiliser UInt () en supposant qu'il convertira l'Int en valeur non signée mais cela n'a pas fonctionné.

Niko Adrianus Yuwono
la source
9
cast / convert ne devrait jamais être utilisé pour changer de valeur
Bryan Chen

Réponses:

417

La abs()fonction standard fonctionne très bien ici:

let c = -8
print(abs(c))
// 8
BS
la source
Nice info man! Merci! J'accepterai la réponse après 10 minutes :)
Niko Adrianus Yuwono
Que faut-il importer pour utiliser abs ()?
Jarrod Smith
3
@JarrodSmith: import Foundation
Adrian
3
Vous pouvez importer Darwin ou Foundation
YYamil
Darwin ne fait-il pas partie de la Fondation?
Marin
40

Avec Swift 5, vous pouvez utiliser l'une des deux méthodes suivantes pour convertir un entier en sa valeur absolue.


#1. Obtenir la valeur absolue d'une propriété Intfrommagnitude

Inta une magnitudepropriété. magnitudea la déclaration suivante:

var magnitude: UInt { get }

Pour toute valeur numérique x, x.magnitudeest la valeur absolue de x.

L'extrait de code suivant montre comment utiliser la magnitudepropriété pour obtenir la valeur absolue sur une Intinstance:

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

# 2. Obtenir la valeur absolue d'une méthode Intfromabs(_:)

Swift a une fonction numérique globale appelée abs(_:)méthode. abs(_:)a la déclaration suivante:

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

Renvoie la valeur absolue du nombre donné.

L'extrait de code suivant montre comment utiliser abs(_:)la fonction globale pour obtenir la valeur absolue sur une Intinstance:

let value = -5
print(abs(value)) // prints: 5
Imanou Petit
la source
print (abs (Int.min)) ne fonctionnera pas. Existe-t-il une solution pour Swift 3? Je n'ai pas encore mis à jour mon projet.
bibscy le
3
Occasion manquée de dire "obtenir la valeur absolue sur une position Int "
LinusGeffarth
1
@bibscy Voir l'explication d' Apple pour comprendre pourquoi abs(Int8.min)ne peut pas fonctionner et crée donc une erreur de débordement.
Imanou Petit
10

Si vous voulez forcer un nombre à changer ou le garder positif.
Voici le chemin:

abs() for int
fabs() for double
fabsf() for float
Sourabh Kumbhar
la source
fabs est obsolète
Chewie The Chorkie
2

Si vous voulez obtenir une valeur absolue à partir d'un double ou d'un Int, utilisez fabsfunc:

var c = -12.09
print(fabs(c)) // 12.09
c = -6
print(fabs(c)) // 6
Hamed
la source
Oui, vous avez raison, mais je me concentrais sur fabs, excusez-moi
Hamed