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: