Magic_Doctor
XLDnaute Barbatruc
Bonsoir,
Je m'amusais à savoir combien pouvait-il y avoir de chiffres entre 2 chiffres.
Je m'explique :
Par exemple, entre 1 et 2 :
- avec des ENTIERS il n'y a que 2 chiffres
- avec des DÉCIMAUX, mais avec 1 seul chiffre après la virgule, il y a 11 chiffres
- avec des DÉCIMAUX, mais avec 2 chiffres après la virgule, il y a 101 chiffres
- avec des DÉCIMAUX, mais avec 3 chiffres après la virgule, il y a 1.001 chiffres
- avec des DÉCIMAUX, mais avec 4 chiffres après la virgule, il y a 10.001 chiffres
- avec des DÉCIMAUX, mais avec 5 chiffres après la virgule, il y a 100.001 chiffres
En étudiant cette progression, j'ai bidouillé la fonction suivante :
Contre toute attente, j'obtiens le nombre de chiffres + 1.
Je modifie la fonction :
Et là ça me donne le bon nombre de chiffres, mais au-delà d'un certain nombre (2 milliards... il faut dire qu'on monte vite en chiffres !) ça ne marche plus.
Pourquoi cette discordance entre "Long" et "Double" ? Mais, surtout, pourquoi avec "Double" on se plante dès le départ ?
Je m'amusais à savoir combien pouvait-il y avoir de chiffres entre 2 chiffres.
Je m'explique :
Par exemple, entre 1 et 2 :
- avec des ENTIERS il n'y a que 2 chiffres
- avec des DÉCIMAUX, mais avec 1 seul chiffre après la virgule, il y a 11 chiffres
- avec des DÉCIMAUX, mais avec 2 chiffres après la virgule, il y a 101 chiffres
- avec des DÉCIMAUX, mais avec 3 chiffres après la virgule, il y a 1.001 chiffres
- avec des DÉCIMAUX, mais avec 4 chiffres après la virgule, il y a 10.001 chiffres
- avec des DÉCIMAUX, mais avec 5 chiffres après la virgule, il y a 100.001 chiffres
En étudiant cette progression, j'ai bidouillé la fonction suivante :
VB:
Function NbChiffres(LimInf As Long, LimSup As Long, dec As Byte) As Double
Dim i As Byte, x As Double
If dec = 0 Then
x = 0
Else
For i = 0 To dec
x = x + 10 ^ (i - 1)
Next
End If
NbChiffres = (LimSup - LimInf) * (1 + 9 * x) + 1
End Function
Je modifie la fonction :
VB:
Function NbChiffres2(LimInf As Long, LimSup As Long, dec As Byte) As Long
'Magic_Doctor
Dim i As Byte, x As Long
If dec = 0 Then
x = 0
Else
For i = 0 To dec
x = x + 10 ^ (i - 1)
Next
End If
NbChiffres2 = (LimSup - LimInf) * (1 + 9 * x) + 1
End Function
Pourquoi cette discordance entre "Long" et "Double" ? Mais, surtout, pourquoi avec "Double" on se plante dès le départ ?
Pièces jointes
Dernière édition: