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 avec on obtient 3

Et en mettant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Nombre = round (3.25,1)
on obtient 3.3 ...



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.



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

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