HOWTO · PowerShell
Comment arrondir des nombres dans PowerShell
Cet article discutera de la façon dont nous pouvons arrondir des nombres dans PowerShell en utilisant plusieurs fonctions de la classe Math du framework .NET.
Sur cette page
PowerShell propose plusieurs façons de modifier la précision d’un nombre ; le bon choix dépend du résultat recherché. Utilisez [Math]::Truncate pour supprimer la partie fractionnaire en allant vers zéro, [Math]::Floor ou [Math]::Ceiling pour un arrondi dirigé, et [Math]::Round pour arrondir à la valeur la plus proche. Pour choisir le nombre de décimales ou contrôler les égalités à mi-chemin, utilisez la surcharge appropriée de [Math]::Round.
Choisir le comportement d’arrondi adapté à votre tâche
Ces opérations ont des fonctions différentes. La troncature supprime la partie fractionnaire et se dirige vers zéro. Floor se dirige vers moins l’infini, tandis que Ceiling se dirige vers plus l’infini. L’arrondi à la valeur la plus proche utilise [Math]::Round ; par défaut, les égalités à mi-chemin sont arrondies au pair. Choisissez l’opération avant de formater ou d’afficher une valeur, car le formatage modifie la façon dont un nombre est présenté, mais pas sa valeur numérique sous-jacente.
Exécutez cet exemple. Le code et les sorties restent inchangés ; les libellés textuels affichés sont en anglais.
$value = 12.34
[Math]::Round($value, 1)
12.3
Tronquer vers zéro avec [Math]::Truncate
[Math]::Truncate supprime la partie fractionnaire et se dirige vers zéro. Pour une valeur positive, cela ressemble à un arrondi vers le bas ; pour une valeur négative, le résultat se déplace vers le haut sur la droite numérique. Par exemple, tronquer -4.8 donne -4, tandis qu’un arrondi vers moins l’infini donne -5. Utilisez la troncature pour supprimer les chiffres fractionnaires sans toujours vous diriger vers moins l’infini.
Le code et les sorties de l’exemple restent inchangés ; les libellés textuels affichés sont en anglais.
$positive = [Math]::Truncate(4.8)
$negative = [Math]::Truncate(-4.8)
"$positive, $negative"
4, -4
Arrondir vers le bas avec [Math]::Floor et vers le haut avec [Math]::Ceiling
[Math]::Floor renvoie le plus grand entier inférieur ou égal à la valeur d’entrée ; le résultat se dirige donc vers moins l’infini. [Math]::Ceiling renvoie le plus petit entier supérieur ou égal à la valeur d’entrée ; le résultat se dirige donc vers plus l’infini. Le sens de l’arrondi se rapporte à la droite numérique, pas à la valeur absolue : pour un nombre négatif, Floor peut donner un résultat plus négatif, tandis que Ceiling peut donner un résultat moins négatif.
Le code et les sorties de l’exemple restent inchangés ; les libellés textuels affichés sont en anglais.
$value = -4.2
$down = [Math]::Floor($value)
$up = [Math]::Ceiling($value)
"$down, $up"
-5, -4
Arrondir à l’entier le plus proche avec [Math]::Round
[Math]::Round(value) renvoie l’entier le plus proche. Lorsque la valeur est exactement à mi-chemin entre deux entiers, le comportement par défaut de MidpointRounding est l’arrondi au pair : le résultat est l’entier voisin pair. Cette règle évite un biais systématique en faveur des valeurs supérieures lorsque des égalités à mi-chemin sont arrondies à répétition. Les égalités 62.5 et 63.5 vont donc vers des entiers voisins différents. Il ne s’agit pas d’un arrondi qui ferait toujours monter une valeur se terminant par un demi.
Le code et les sorties de l’exemple restent inchangés ; les libellés textuels affichés sont en anglais.
$firstTie = [Math]::Round(62.5)
$secondTie = [Math]::Round(63.5)
"$firstTie, $secondTie"
62, 64
Arrondir à un nombre de décimales choisi
Utilisez [Math]::Round(value, digits) pour arrondir à un nombre précis de décimales. L’argument digits indique le nombre de décimales : 0 demande un entier, 1 une décimale et 2 deux décimales. Le résultat reste une valeur numérique, et non une chaîne d’affichage de largeur fixe ; les zéros finaux peuvent donc être absents. Pour des prix ou d’autres valeurs à échelle fixe, formatez séparément le résultat à l’affichage et choisissez un type numérique ainsi qu’une règle d’arrondi adaptés aux calculs.
Le code et les sorties de l’exemple restent inchangés ; les libellés textuels affichés sont en anglais.
$value = 63.827439
$whole = [Math]::Round($value, 0)
$onePlace = [Math]::Round($value, 1)
$twoPlaces = [Math]::Round($value, 2)
"$whole; $onePlace; $twoPlaces"
64; 63.8; 63.83
Choisir explicitement le comportement des égalités à mi-chemin
Si la règle par défaut de l’arrondi au pair ne correspond pas à la politique souhaitée, transmettez une valeur MidpointRounding à [Math]::Round. MidpointRounding.AwayFromZero éloigne du zéro une valeur exactement à mi-chemin : les égalités positives augmentent et les égalités négatives diminuent. Choisissez explicitement cette règle si vos exigences imposent un arrondi des demis en s’éloignant de zéro. .NET propose d’autres règles pour les valeurs à mi-chemin ; vérifiez donc la politique requise au lieu de supposer que le mot « arrondir » désigne une règle universelle.
Le code et les sorties de l’exemple restent inchangés ; les libellés textuels affichés sont en anglais.
$positiveTie = [Math]::Round(2.5, [MidpointRounding]::AwayFromZero)
$negativeTie = [Math]::Round(-2.5, [MidpointRounding]::AwayFromZero)
"$positiveTie, $negativeTie"
3, -3