sergio_bzh
XLDnaute Nouveau
Bonjour,
c'est un problème déjà évoqué il y a longtemps mais si quelqu'un avait une solution ce serait pas mal !
https://www.excel-downloads.com/threads/petite-enigme-de-precision.24363/
A partir de nombres avec 4 chiffres après la virgule, je me retrouve avecdes nombres avec 15 chiffres. Pourtant, je pars d'un Single (réél simple)
- je multiplie par 10000
- je prends la partie entière en le mettant dans un Long
- je divise par 10000
=> le nombre a bien 4 décimales
- j'ajoute 0.1
=> le nombre a 15 décimales.
Voilà le code pour mettre le pb en évidence :
Il y a une demi-solution qui consisterait à transformer en chaine de caractères avant de mettre dans la cellule mais ça ne me convient pas du tout.
Je suis en Excel 2000 sous XP. Si quelqu'un a une solution à ce problème ...
Merci.
Sergio
c'est un problème déjà évoqué il y a longtemps mais si quelqu'un avait une solution ce serait pas mal !
https://www.excel-downloads.com/threads/petite-enigme-de-precision.24363/
A partir de nombres avec 4 chiffres après la virgule, je me retrouve avecdes nombres avec 15 chiffres. Pourtant, je pars d'un Single (réél simple)
- je multiplie par 10000
- je prends la partie entière en le mettant dans un Long
- je divise par 10000
=> le nombre a bien 4 décimales
- j'ajoute 0.1
=> le nombre a 15 décimales.
Voilà le code pour mettre le pb en évidence :
Code:
Sub Macro1()
Range("A1").Select
Range("A1").NumberFormat = "0.00%"
Range("B1").FormulaR1C1 = "31"
Range("C1").FormulaR1C1 = "20"
va = (Range("B1").FormulaR1C1 - Range("C1").FormulaR1C1) / Range("B1").FormulaR1C1
vaNorm = NormalizeVal(va)
Range("A1").Value = vaNorm
vabiz = vaNorm + 0.1
End Sub
' Resultat des courses :
' "va" vaut 0,354838709677419
' "vaNorm" vaut 0,4548
' "vaBiz" vaut 0,45479998588562
Private Function NormalizeVal(ByVal v As Single) As Single
Dim lg As Long
lg = CLng(10000 * v)
NormalizeVal = CSng(lg / 10000)
End Function
Il y a une demi-solution qui consisterait à transformer en chaine de caractères avant de mettre dans la cellule mais ça ne me convient pas du tout.
Je suis en Excel 2000 sous XP. Si quelqu'un a une solution à ce problème ...
Merci.
Sergio