Bonjour à toutes et à tous,
Voilà mon problème, je souhaite arrondir un nombre à 0.5, c'est à dire, que si j'ai 3.2 ou 3.25 , j'obtiens 3.5 et si j'ai 3.7 ou 3.75, j'obtiens 4.0.
J'ai essaié avec la fonction round(), mais le problème est le nombre ayant une décimal inférieur à 0.5, se voit passer à l'entier inférieur... : 3.25 avecon obtient 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part Nombre = round(3.25)
Et en mettanton obtient 3.3 ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Nombre = round (3.25,1)
J'ai trouvé une solution, mais je la trouve extrèmement lourde.
Je me sers d'un motif de RegEx pour valider une boucle. Voici mon code test qui m'a permis de valider le motif et de répondre à ce que je souhaite.
Nous avons des nombres ayant pour valeur max après la décimal 0.05, donc 3.05, 4.45, ..., donc j'augment le nombre de 0.05 et je compare au motif jusqu'à avoir une réponse True. Ici quand je rentre 3.25, je trouve comme résultat final 3.5 et pour 3.75, j'obtiens 4
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Imports System.Text.RegularExpressions Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim reg As New Regex("^[\d+]((\,?)(\.?))((\0?)(5?))$") Dim Text As Single Dim Valeur As Single = CSng(0.05) text = CSng(TextBox1.Text) If reg.IsMatch(Text) = False Then Do Text = Text + Valeur Loop Until reg.IsMatch(Text) = True End If MsgBox(Text) End Sub End Class
Je trouve ça peut évident à mettre en place dans mon programme plus complexe, et me demande s'il y a une meilleure solution pour ce type d'arrondi .
Cordialement,
Bacube
Partager