Nombre de zéro(s) immédiatement après la virgule

Magic_Doctor

XLDnaute Barbatruc
Rebonjour,

Je voudrais connaître, pour des chiffres décimaux, le nombre de 0 (zéro(s)) qu'il y a immédiatement après la virgule.
Par exemple :
123,0258 ---> 1
5,00088 ---> 3
-0,000009036 ---> 5

J'avais conservé sous le coude ces 2 fonctions :

------------------------------------------------------------------------------------
Function HowLong(dNum As Double) As Byte
'Renvoie le nombre réel de chiffres après la virgule d'une nombre

Dim SepDec$, tmp$, posDec As Byte

On Error Resume Next

SepDec = Application.International(xlDecimalSeparator)
tmp = CStr(dNum)
posDec = InStr(tmp, SepDec)

If posDec = 0 Then
HowLong = 0
Else
HowLong = Len(tmp) - Len(Right(tmp, posDec))
End If

End Function

------------------------------------------------------------------------------------
Function ApresLaVirgule(cell As Range) As Byte

Dim SepDec$, tmp$, pos As Byte, res

On Error Resume Next

SepDec = Application.International(xlDecimalSeparator)
tmp = cell.Text
pos = InStr(1, tmp, SepDec)

If pos = 0 Then
res = 0
Else
res = Left(Right(tmp, Len(tmp) - pos), 8)
End If
If Len(res) = 1 Then res = res * 10

ApresLaVirgule = Len(res * 1)

End Function

------------------------------------------------------------------------------------
En soustrayant ces 2 fonctions (je sens que certains vont rigoler au vu de cet infâme bricolage...) :
HowLong([K17]) - ApresLaVirgule([K17])

J'obtiens bien le résultat attendu, mais ça plante avec les nombres entiers. ¡Caramba!

Un grand merci pour m'aider à sortir du ¡Caramba!
 

job75

XLDnaute Barbatruc
Re : Nombre de zéro(s) immédiatement après la virgule

Re,

Pour que ma formule ne pose pas de problème quand on la copie sur un ordi avec le point comme séparateur décimal, utiliser :

Code:
=SI(A2=ENT(A2);0;NBCAR(STXT(A2;TROUVE(STXT(1/10;2;1);A2)+1;20))-NBCAR(--STXT(A2;TROUVE(STXT(1/10;2;1);A2)+1;20)))

J'ai simplement remplacé 0,1 par 1/10 :)

@ pierrejean

Merci d'éditer ton fichier, et merci de m'avoir rappelé que Mid(t, x, 20) s'écrit plus simplement Mid(t, x) quand on veut aller jusqu'au dernier caractère.

A+
 

KenDev

XLDnaute Impliqué
Re : Nombre de zéro(s) immédiatement après la virgule

Re,

La formule précédente ajoute 1 au résultat souhaité lorsque la valeur vaut exactement n,1 ou n,01 ou n,001 etc...

d'où
Code:
=SI(MOD(A2;1)=0;0;SI(MOD(LOG(1/(ABS(A2)-ENT(ABS(A2))));1)=0;ENT(LOG(1/(ABS(A2)-ENT(ABS(A2)))))-1;ENT(LOG(1/(ABS(A2)-ENT(ABS(A2)))))))

On y perd en concision mais la logique reste 100% calcul.

Cordialement

KD

edit : la même, un peu plus court
Code:
=SI(MOD(ABS(A2);1)=0;0;SI(MOD(LOG(1/MOD(ABS(A2);1));1)=0;LOG(1/MOD(ABS(A2);1))-1;ENT(LOG(1/MOD(ABS(A2);1)))))
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 095
Messages
2 085 253
Membres
102 837
dernier inscrit
CRETE