OVH Cloud OVH Cloud

Int pfff !

10 réponses
Avatar
garnote
Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre \ 1
End Sub

Serge

10 réponses

Avatar
michdenis
Bonjour Garnote,

Voici quelques alternatives :

Ta variable est déclaré "As Double" ... Int() n'est pas une fonction de conversion !

'-----------------------------
Sub Valeur_Entière1()
Dim nombre As Integer
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------

Sub Valeur_Entière2()
Dim nombre As Integer
nombre = 316.84 * 100
MsgBox CInt(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------

Sub Valeur_Entière3()
Dim nombre As Variant
nombre = 316.84 * 100
MsgBox CLng(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------
Sub Valeur_Entière4()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox CLng(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------
Sub Valeur_Entière5()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox CInt(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------


Salutations!



"garnote" a écrit dans le message de news:D3VCc.14455$
Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub

Serge
Avatar
garnote
Alors là, j'en ai plus que j'en voulais :-)

Serge


"michdenis" a écrit dans le message de news:

Bonjour Garnote,

Voici quelques alternatives :

Ta variable est déclaré "As Double" ... Int() n'est pas une fonction de
conversion !


'-----------------------------
Sub Valeur_Entière1()
Dim nombre As Integer
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------

Sub Valeur_Entière2()
Dim nombre As Integer
nombre = 316.84 * 100
MsgBox CInt(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------

Sub Valeur_Entière3()
Dim nombre As Variant
nombre = 316.84 * 100
MsgBox CLng(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------
Sub Valeur_Entière4()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox CLng(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------
Sub Valeur_Entière5()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox CInt(nombre) & vbNewLine & nombre 1
End Sub
'-----------------------------


Salutations!



"garnote" a écrit dans le message de
news:D3VCc.14455$

Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub

Serge





Avatar
Nicolas B.
Salut,

Sans m'aventurer trop loin dans les décimales, il semble que :
316,84*100 = 31683,999999999996362...

Voilà d'où sort ce résultat :
Dim nombre As Double
nombre = 316.84 * 100
MsgBox nombre - 31683


A+
--
Nicolas B.


Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub

Serge


Avatar
AV
Avec la fonction de feuille de calcul (pour Round aussi) et un petit coup
d'Evaluate, on évite ça :

MsgBox Evaluate("int(" & nombre & ")")

AV
Avatar
Rv
Salut,

Pour moi ce n'est pas étonnant étant donné qu'un nombre réél peut
s'exprimer avec une infinité de chiffre après la virgule et que dans le
codage d'un réel il y a un nombre fini de bits (64 bits sur double). Je sais
ici 316.84 est plutôt un décimal. Mais sur le principe 316.84 ne sera pas
codé de façon exacte s'il est converti en réel. Ce sera 316.84 + ou - une
marge d'erreur. Dans ce cas l'erreur est apparement de l'odre
de -2,50111042987555E-14 donc en fait 316.84 est codé en
316.8399999999999749... On s'en rend compte en faisant un msgbox
316.84*100-31684
Donc ce n'est pas le int qui cloche. Il fait bien son boulot. C'est plutôt
un problème de représentation de l'information. Il nous faudrait un type
décimal!

A+

Rv

"garnote" a écrit dans le message de
news:D3VCc.14455$
Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub

Serge




Avatar
garnote
Si le premier chiffre de 316.84 est différent de 3,
Int donne le bon résultat.
Tout de même curieux, non ?

Serge
« Docteur, ma femme est clouée au lit, je souhaiterais
que vous la vissiez. »


"Rv" a écrit dans le message de news:

Salut,

Pour moi ce n'est pas étonnant étant donné qu'un nombre réél peut
s'exprimer avec une infinité de chiffre après la virgule et que dans le
codage d'un réel il y a un nombre fini de bits (64 bits sur double). Je
sais

ici 316.84 est plutôt un décimal. Mais sur le principe 316.84 ne sera pas
codé de façon exacte s'il est converti en réel. Ce sera 316.84 + ou - une
marge d'erreur. Dans ce cas l'erreur est apparement de l'odre
de -2,50111042987555E-14 donc en fait 316.84 est codé en
316.8399999999999749... On s'en rend compte en faisant un msgbox
316.84*100-31684
Donc ce n'est pas le int qui cloche. Il fait bien son boulot. C'est plutôt
un problème de représentation de l'information. Il nous faudrait un type
décimal!

A+

Rv

"garnote" a écrit dans le message de
news:D3VCc.14455$
Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub

Serge








Avatar
Rv
Re Serge,

Ben je ne trouve pas car selon le nombre on voit que la marge d'erreur
est en excés ou en défaut si elle est en défaut int donne normalement
l'entier inférieur donc il y perte d'une unité si elle l'erreur est en
excés int donne toujours l'entier inférieur mais il n'y plus perte d'unité.
Ca ne dépend pas du 3. Je copie colle des exemples du même cru de la fenêtre
d'éxecution:

?int(1.1*10)
11
?1.1*10-11
8,88178419700125E-16
C'était une erreur en excés donc pas de perte

?int(1.2*10)
11
?1.2*10-12
-4,44089209850063E-16
Et c'est bien une erreur en défaut donc perte!

A+

Rv


"garnote" a écrit dans le message de
news:IGWCc.14550$
Si le premier chiffre de 316.84 est différent de 3,
Int donne le bon résultat.
Tout de même curieux, non ?

Serge
« Docteur, ma femme est clouée au lit, je souhaiterais
que vous la vissiez. »


"Rv" a écrit dans le message de news:

Salut,

Pour moi ce n'est pas étonnant étant donné qu'un nombre réél peut
s'exprimer avec une infinité de chiffre après la virgule et que dans le
codage d'un réel il y a un nombre fini de bits (64 bits sur double). Je
sais

ici 316.84 est plutôt un décimal. Mais sur le principe 316.84 ne sera
pas


codé de façon exacte s'il est converti en réel. Ce sera 316.84 + ou -
une


marge d'erreur. Dans ce cas l'erreur est apparement de l'odre
de -2,50111042987555E-14 donc en fait 316.84 est codé en
316.8399999999999749... On s'en rend compte en faisant un msgbox
316.84*100-31684
Donc ce n'est pas le int qui cloche. Il fait bien son boulot. C'est
plutôt


un problème de représentation de l'information. Il nous faudrait un type
décimal!

A+

Rv

"garnote" a écrit dans le message de
news:D3VCc.14455$
Bonjour,

Mais quand donc faut-il se méfier de Int ?

Sub Valeur_Entière()
Dim nombre As Double
nombre = 316.84 * 100
MsgBox Int(nombre) & vbNewLine & nombre 1
End Sub

Serge












Avatar
sabatier
du grand serge....:-))))
jps

garnote a écrit:
« Docteur, ma femme est clouée au lit, je souhaiterais
que vous la vissiez. »


Avatar
garnote
Il y a aussi :

Il serait dommage qu'à trop manger de gâteaux,
un jour vous en pâtissiez !

Plus de huit jours au lit, je douterais que vous pussiez !

Pourquoi voudriez-vous que Jérémie et moi
nous nous lamentassions !

:-)))

Serge



"sabatier" a écrit dans le
message de news:
du grand serge....:-))))
jps

garnote a écrit:
« Docteur, ma femme est clouée au lit, je souhaiterais
que vous la vissiez. »








Avatar
garnote
J'ai retrouvé ma source :

Titre : Pour tout l'or des mots
Au bonheur des mots et des merveilles
Auteur : Claude Gagnière
Éditions : Robert Laffont, 1997
ISBN : 2-221-08255-9

Serge
Épitaphe : « Je vous l'avais bien dit que j'étais malade. »


"garnote" a écrit dans le message de news:
UtXCc.9768$
Il y a aussi :

Il serait dommage qu'à trop manger de gâteaux,
un jour vous en pâtissiez !

Plus de huit jours au lit, je douterais que vous pussiez !

Pourquoi voudriez-vous que Jérémie et moi
nous nous lamentassions !

:-)))

Serge



"sabatier" a écrit dans le
message de news:
du grand serge....:-))))
jps

garnote a écrit:
« Docteur, ma femme est clouée au lit, je souhaiterais
que vous la vissiez. »