none
comment arrondir un nombre RRS feed

  • Question

  • Bonsoir

    je voudrais de l'aide pour résoudre un problème sur les Doubles.

    voici mon code:

    ce code me permet de calculer un redevance (Me.RedevanceTextBox.text) et un frais en fonction de la superficie (Me.TextBoxFraisSuper.Text) . je souhaite que la redevance et le montant du frais superficiaire soit des chiffes ronds même si la superficie contient une virgule.

    sa marche pour  0<= Me.SperTextBox <= 50 mais pas pour les autre.

    je suis débutant en développement , j'ai besoin de votre aide merci.


    '    'NOUVEAU mode de calcul 
    
            If (0 <= Me.SperTextBox.Text And Me.SperTextBox.Text <= 50) Then
               Me.TextBoxFraisSuper.Text = Me.SperTextBox.Text * 150
               Me.RedevanceTextBox.Text = (CDbl(Me.TextBoxFraisSuper.Text) + CDbl(Me.ComboBoxTaxeFix.Text) + CDbl(Me.TextBox2.Text))
                  ElseIf (51 <= Me.SperTextBox.Text And Me.SperTextBox.Text <= 100) Then
                    Me.TextBoxFraisSuper.Text = ((50 * 150) + (CDbl(Me.SperTextBox.Text) - 50) * 125)
                      Me.RedevanceTextBox.Text = (CDbl(Me.TextBoxFraisSuper.Text) + CDbl(Me.ComboBoxTaxeFix.Text) + CDbl(Me.TextBox2.Text))
                  ElseIf (101 <= Me.SperTextBox.Text And Me.SperTextBox.Text <= 500) Then
                    Me.TextBoxFraisSuper.Text = ((50 * 150) + (50 * 125) + (CDbl(Me.SperTextBox.Text) - 100) * 100)
                      Me.RedevanceTextBox.Text = (CDbl(Me.TextBoxFraisSuper.Text) + CDbl(Me.ComboBoxTaxeFix.Text) + CDbl(Me.TextBox2.Text))
                  ElseIf (501 <= Me.SperTextBox.Text And Me.SperTextBox.Text <= 5000) Then
                    Me.TextBoxFraisSuper.Text = ((50 * 150) + (50 * 125) + (400 * 100) + (CInt(Me.SperTextBox.Text) - 500) * 75)
                      Me.RedevanceTextBox.Text = (CDbl(Me.TextBoxFraisSuper.Text) + CDbl(Me.ComboBoxTaxeFix.Text) + CDbl(Me.TextBox2.Text))
                  ElseIf (5001 <= Me.SperTextBox.Text And Me.SperTextBox.Text <= 15000) Then
                    Me.TextBoxFraisSuper.Text = ((50 * 150) + (50 * 125) + (400 * 100) + (4500 * 75) + (CDbl(Me.SperTextBox.Text) - 5000) * 45)
                      Me.RedevanceTextBox.Text = (CDbl(Me.TextBoxFraisSuper.Text) + CDbl(Me.ComboBoxTaxeFix.Text) + CDbl(Me.TextBox2.Text))
            Else
    
                    Me.TextBoxFraisSuper.Text = ((50 * 150) + (50 * 125) + (400 * 100) + (4500 * 75) + (10000 * 45) + (CDbl(Me.SperTextBox.Text) - 15000) * 25)
                Me.RedevanceTextBox.Text = (CDbl(Me.TextBoxFraisSuper.Text) + CDbl(Me.ComboBoxTaxeFix.Text) + CDbl(Me.TextBox2.Text))
    
    
        End If


    mardi 24 février 2015 16:57

Réponses

  • Bonjour,

    Il y a quelques rudiments essentiels à savoir absolument quand on programme en environnement .NET. Parmi ces rudiments, il y a :

    - Les opérations et les transtypages : quand on spécifie directement un nombre sans partie décimale, il est considéré comme un entier. Par exemple "50" est un considéré comme un entier mais "50.0" est considéré comme un réel double, "50m" est considéré comme "decimal", etc... Regardez les documentations des types Integer, Double ou encore Decimal par exemple. Pour les opérations, "50+100" renvoie un Integer, alors que "50.0+100" ou "50+100.0" ou "50.0+100.0" renvoie un Double. De même "50m+100" renvoie un Decimal.

    - VB fait des conversions implicites entre des chaines de caractères et des nombres ce qui, à mon avis, n'aide pas vraiment à la compréhension du code... C'est l'une des raisons pour lesquelles je préfères le C#... Tout ça pour dire que dans votre cas, il est préférable de ne pas travailler directement sur les champs de saisie mais plutôt avec des variables ayant les bon types, car sinon cela peut devenir très incompréhensible à la relecture.

    - J'ai parlé du type Decimal, et à ce propos, si vous manipulez des données portant sur des montants qui doivent avoir des arrondis très précis, je vous conseille donc d'utiliser le type Decimal au lieu du type Double car ce dernier peut faire des approximations non désirées. Tout cela est aussi mentionné dans la documentation MSDN...


    Philippe


    • Modifié PhGr_ mercredi 25 février 2015 08:22
    • Proposé comme réponse Boris Ivanov _ vendredi 27 février 2015 11:34
    • Marqué comme réponse Boris Ivanov _ samedi 28 février 2015 12:43
    mercredi 25 février 2015 08:19

Toutes les réponses

  • Bonjour,

    Il y a quelques rudiments essentiels à savoir absolument quand on programme en environnement .NET. Parmi ces rudiments, il y a :

    - Les opérations et les transtypages : quand on spécifie directement un nombre sans partie décimale, il est considéré comme un entier. Par exemple "50" est un considéré comme un entier mais "50.0" est considéré comme un réel double, "50m" est considéré comme "decimal", etc... Regardez les documentations des types Integer, Double ou encore Decimal par exemple. Pour les opérations, "50+100" renvoie un Integer, alors que "50.0+100" ou "50+100.0" ou "50.0+100.0" renvoie un Double. De même "50m+100" renvoie un Decimal.

    - VB fait des conversions implicites entre des chaines de caractères et des nombres ce qui, à mon avis, n'aide pas vraiment à la compréhension du code... C'est l'une des raisons pour lesquelles je préfères le C#... Tout ça pour dire que dans votre cas, il est préférable de ne pas travailler directement sur les champs de saisie mais plutôt avec des variables ayant les bon types, car sinon cela peut devenir très incompréhensible à la relecture.

    - J'ai parlé du type Decimal, et à ce propos, si vous manipulez des données portant sur des montants qui doivent avoir des arrondis très précis, je vous conseille donc d'utiliser le type Decimal au lieu du type Double car ce dernier peut faire des approximations non désirées. Tout cela est aussi mentionné dans la documentation MSDN...


    Philippe


    • Modifié PhGr_ mercredi 25 février 2015 08:22
    • Proposé comme réponse Boris Ivanov _ vendredi 27 février 2015 11:34
    • Marqué comme réponse Boris Ivanov _ samedi 28 février 2015 12:43
    mercredi 25 février 2015 08:19
  • Merci justement j'ai commencé l'étude du code de C#

    merci

    mardi 3 mars 2015 10:49