Empecher notation scientifique [Résolu]

Signaler
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
 Utilisateur anonyme -
Bonjour

si j'écris
dim x as double 
 x = 1.024
 x = x - 1


j'obtiens x = .024

mais pour
x = 1.0024
x = x -1


j'obtiens
x = 2.39999999999996E-03
comment obtenir
.0024

merci

17 réponses

Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Re,

Si le nombre de décimales n'est pas fixe, ne pourrais-tu pas formater selon le nombre maxi de décimales possibles. (8 par exemple)
Ok, ce n'est pas très élégant car tu peux avoir
0.00240000
0.12300000
0.00000056
Mais je ne vois pas, pour l'instant, d'autres moyens...

Cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour,

Utiliser Format$(x - 1, "0.0000")

Cheyenne
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
Bonjour cheyenne

le problème c'est que je ne sais pas le nombre
de chiffres après le .
j'ai remarqué que si
on a un double
qui commence par 1.00
le resultat de double - 1 est donné avec notation scientifique
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
merci pour l'idée
il fallait penser

Bonjour,
empecher notation scientifique

Pourquoi veux-tu empêcher les scientifique de s'exprimer ???

Et si tu fais ça:
Dim x As Double
x = 1.0024
MsgBox Format$(x - 1, "0.###############")
x = 1.00000056
MsgBox Format$(x - 1, "0.###############")


Ce n'est pas le résultat attendu?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour acive,

Oui, si la précision est de rigueur.
Mais VB6 (comme Excel) nous joue parfois des tours. Comment expliquer ceci :
Dim x As Double
x = 1.0024
MsgBox Format$(x - 1, "0.###############")

le résultat est 0.002400041 !!!!???!!!

J'avais préconisé le formatage avec des 0 plutôt qu'avec #. Ainsi on a un nombre fixe de décimales (contrairement à # qui n'affiche que les décimales utiles). Si les nombres sont affichés dans un FlexGrid ou des labels positionnés verticalement cela permet d'avoir un alignement avec une police à chasse fixe.
Mais l'ami ShayW ne nous a pas indiqué comment étaient affichés les résultats.


Bonne soirée à vous deux,

Cheyenne

Bonjour cheyenne,
Moi j'ai 0,0024 c'est bizarre..

on a un nombre fixe de décimales

Oui je comprends le raisonnement.

Et comme toi la tout de suite, je ne vois pas d'autre issue


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
224
Bonjour à tous,
J'ai également bien 0,0024 avec l'exemple donné
Mais cheyenne a peut-être oublié de nous dire que la valeur de sa variable x était elle même le résultat d'un calcul en amont


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
224
Autre expluication plausible :
cheyenne a fait un test depuis Excel et non depuis VB6.
s'il a écrit 1,002400041 dans une cellule Excel formatée en nombre avec 4 décimales, il y aura "vu" 1,0024 (mais Excel gardait bien évidemment la valeur réelle en mémoire).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Bonjour,
Même sous excel j'ai toujours 0,0024 que la valeur de x soit extraite d'une cellule ou non.
Je penche plutôt pour une des réponses de ucfoutu.

Sinon c'est ton processeur qui ne sait pas compter

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour acive et ucfoutu,

- Sinon c'est ton processeur qui ne sait pas compter
Je serai bien tenté de le croire, mais de manière sporadique, car aujourd'hui avec le même code j'ai un résultat correct. !?! et je n'ai pas la berlue...

- Mais cheyenne a peut-être oublié de nous dire que la valeur de sa variable x était elle même le résultat d'un calcul en amont
Non, ucfoutu, ce n'est pas ma variable, mais celle d'acive et vu le code utilisé dans mon exemple elle n'est pas issue d'un calcul.

- cheyenne a fait un test depuis Excel et non depuis VB6.
Non, hier, je n'avais pas ce test avec Excel mais bien avec VB6, j'ai seulement dit que VB6 (comme Excel) nous joue parfois des tours mais pas en évoquant ce cas précis. Il arrive qu'Excel ne "compte pas juste" avec les doubles voir ici LIEN
Par contre, et par acquis de conscience, je viens juste de faire le test avec Excel en VBA et également dans une feuille avec formules, dans les deux cas le résultat est ok.

Bon week-end,

Cheyenne
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
Bonjour à tous

Petite question

Selon le lien donné par Cheyenne quand un nombre
décimal est converti en binaire il y a des risques de ne pas obtenir exactement la meme valeur.
Pourquoi quand on effectue une opération arithmétique avec des réels on obtient une réponse exacte

Salut shaym,
quand tu dis converti en binaire tu veux dire?:
    Public Function DecBin(ByVal Rt As Integer) As String
        Dim Binaire As String = ""
        Dim Bin As String = ""
        Do
            Application.DoEvents()
            Bin &= CStr(Rt Mod 2)
            Rt = CInt(Int(Rt / 2))
        Loop Until Rt 1 Or Rt 0
        If Rt = 0 Then
            Bin &= "0"
        Else
            Bin &= "1"
        End If
        If Bin.Length < 8 Then
            Do While Bin.Length < 8
                Bin &= "0"
            Loop
        End If
        For Rt = 7 To 0 Step -1
            Binaire &= Bin.ToCharArray(Rt, 1)
        Next
        Return Binaire
    End Function



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
Salut Acive
après la plongé je comprend

ma question est plutot général pas un problème
d'algo
j'ai lu quand un nombre réel est representé
avec IEEE754
en faite tu risques d'obtenir un nombre approximatif
comment se fait il si j'écris
dim x as double
dim y as double
dim res as double
x = 1.7
y = 1.3
res = x+y 

pourquoi res = 3 ? et non 2.99999709 approximatif

Parce que 1.7 + 1.3 = 3
et
1.49999 + 1.49999 = 2.99998 ...
Je ne vois pas... t'as plongé toi ???



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
je dois tourner autours du pot
peut etre ici
je me casse trop la tete

Ils disent bien:
"simple précision étendue (≥ 43 bits, obsolète, implémenté en pratique par la double précision),"


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique