6 votes

Arrondir les nombres entiers en Swift

J'aimerais arrondir le nombre entier au centième le plus proche à des fins monétaires, comment est-ce possible en Swift ?

Exemple : 1397968 devient 1397900

13voto

Martin R Points 105727

Si vous voulez arrondir vers le bas à un multiple de 100, vous pouvez alors le faire avec (comme l'a dit @vadian dans un commentaire) :

let amount = 1397968
let rounded = amount/100 * 100
print(rounded) // 1397900

Cela fonctionne parce que la division entière tronque le résultat vers zéro : amount/100 s'évalue à 13979 et en multipliant par 100 donne à nouveau 1397900 .

Mais vous avez demandé la le plus proche multiple de 100 pour un nombre entier donné, et cela peut être fait avec une petite modification :

let amount = 1397968
let rounded = (amount + 50)/100 * 100
print(rounded) // 1398000

pour non négatif entiers. Si vous avez des valeurs positives et négatives alors Réponse de @shallowThought est probablement le plus simple la plus facile à mettre en œuvre. Mais il peut peut également être réalisée avec une arithmétique pure sur les nombres entiers (en utilisant l'approche de Arrondir Int à la valeur la plus proche ) :

func roundToHundreds(_ value: Int) -> Int {
    return value/100 * 100 + (value % 100)/50 * 100
}

roundToHundreds(123) // 100
roundToHundreds(188) // 200

roundToHundreds(-123) // -100
roundToHundreds(-188) // -200

Cela fonctionne pour l'ensemble des Int :

roundToHundreds(Int.max) // 9223372036854775800
roundToHundreds(Int.min) // -9223372036854775800

6voto

appzYourLife Points 10219

Veuillez vous référer à l'article de @Martin R pour une réponse plus détaillée.

En tant que @vadian vous pouvez écrire

let value = 1397968
let rounded = value / 100 * 100

Vous pouvez maintenant l'imprimer

print(rounded) // 1397900

5voto

shallowThought Points 11731
let value = 1397968
let rounded = Int(round(Double(value) / 100) * 100)
print(rounded)

-> 1398000

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X