Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Dans le message news: ,
Pierre s'est ainsi exprimé:Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un
nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres
négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne,
c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction "round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d & "<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
Dans le message news:OrRsATdDFHA.3452@TK2MSFTNGP09.phx.gbl ,
Pierre <pierroozz@freesurf.fr> s'est ainsi exprimé:
Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un
nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres
négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne,
c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction "round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d & "<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
Jean-Claude.Bellamy@wanadoo.fr * JC.Bellamy@free.fr
Dans le message news: ,
Pierre s'est ainsi exprimé:Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un
nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres
négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne,
c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction "round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d & "<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
C'est bon, ça j'avais compris que si fix ou int donne 0.57 c'est parce qu'en interne il y a un 0.57999999 quelque part à cause des
float.
Ma demande était de savoir s'il n'y avait pas un moyen en vbs de travailler avec des "decimal" à la place des "double" et autres
"single".
"Jean-Claude BELLAMY" a écrit dans le message de news:Dans le message news: ,
Pierre s'est ainsi exprimé:Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne, c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction "round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d & "<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
C'est bon, ça j'avais compris que si fix ou int donne 0.57 c'est parce qu'en interne il y a un 0.57999999 quelque part à cause des
float.
Ma demande était de savoir s'il n'y avait pas un moyen en vbs de travailler avec des "decimal" à la place des "double" et autres
"single".
"Jean-Claude BELLAMY" <Jean-Claude.Bellamy@wanadoo.fr> a écrit dans le message de news: e5tm3VeDFHA.1408@TK2MSFTNGP10.phx.gbl...
Dans le message news:OrRsATdDFHA.3452@TK2MSFTNGP09.phx.gbl ,
Pierre <pierroozz@freesurf.fr> s'est ainsi exprimé:
Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne, c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction "round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d & "<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
Jean-Claude.Bellamy@wanadoo.fr * JC.Bellamy@free.fr
C'est bon, ça j'avais compris que si fix ou int donne 0.57 c'est parce qu'en interne il y a un 0.57999999 quelque part à cause des
float.
Ma demande était de savoir s'il n'y avait pas un moyen en vbs de travailler avec des "decimal" à la place des "double" et autres
"single".
"Jean-Claude BELLAMY" a écrit dans le message de news:Dans le message news: ,
Pierre s'est ainsi exprimé:Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne, c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction "round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d & "<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
Bonsoir !
A ma connaissance, VB-script ne supporte pas décimal. Microsoft a
seulement
suivi l'IEEE 754, sur les flottants.
Pour info, Python a intégré un vrai module "decimal", avec la version 2.4
En restant avec VB-script, il faudra donc se rabattre sur les fonctions
d'arrondis, de tronquature, et de cast.
Pour d'autres lecteurs :
les flottants IEEE-754 utilisent une représentation basée sur les
puissances
de 2 ; les librairies "decimal" sont sensées travailler sur des puissances
de 10. Mais ces librairies sont assez lentes.
A noter que, en Python, un decimal peut être créé uniquement à partir
d'un
entier, d'un string, ou d'un autre decimal (par héritage), et que Python
utilise les tuples pour la représentation interne (ce qui est encore plus
lent, mais fournit une précision infinie).
J'ai essayé avec des nombres de 100 chiffres, avec 50 chiffres derrière la
virgule, et ça marche.
Peut-être qu'un jour, Microsoft se penchera sur le problème... En
attendant, il est toujours possible d'appeler des scripts Python depuis
VBS.
Bonne soirée.
--
Michel Claveau
Bonsoir !
A ma connaissance, VB-script ne supporte pas décimal. Microsoft a
seulement
suivi l'IEEE 754, sur les flottants.
Pour info, Python a intégré un vrai module "decimal", avec la version 2.4
En restant avec VB-script, il faudra donc se rabattre sur les fonctions
d'arrondis, de tronquature, et de cast.
Pour d'autres lecteurs :
les flottants IEEE-754 utilisent une représentation basée sur les
puissances
de 2 ; les librairies "decimal" sont sensées travailler sur des puissances
de 10. Mais ces librairies sont assez lentes.
A noter que, en Python, un decimal peut être créé uniquement à partir
d'un
entier, d'un string, ou d'un autre decimal (par héritage), et que Python
utilise les tuples pour la représentation interne (ce qui est encore plus
lent, mais fournit une précision infinie).
J'ai essayé avec des nombres de 100 chiffres, avec 50 chiffres derrière la
virgule, et ça marche.
Peut-être qu'un jour, Microsoft se penchera sur le problème... En
attendant, il est toujours possible d'appeler des scripts Python depuis
VBS.
Bonne soirée.
--
Michel Claveau
Bonsoir !
A ma connaissance, VB-script ne supporte pas décimal. Microsoft a
seulement
suivi l'IEEE 754, sur les flottants.
Pour info, Python a intégré un vrai module "decimal", avec la version 2.4
En restant avec VB-script, il faudra donc se rabattre sur les fonctions
d'arrondis, de tronquature, et de cast.
Pour d'autres lecteurs :
les flottants IEEE-754 utilisent une représentation basée sur les
puissances
de 2 ; les librairies "decimal" sont sensées travailler sur des puissances
de 10. Mais ces librairies sont assez lentes.
A noter que, en Python, un decimal peut être créé uniquement à partir
d'un
entier, d'un string, ou d'un autre decimal (par héritage), et que Python
utilise les tuples pour la représentation interne (ce qui est encore plus
lent, mais fournit une précision infinie).
J'ai essayé avec des nombres de 100 chiffres, avec 50 chiffres derrière la
virgule, et ça marche.
Peut-être qu'un jour, Microsoft se penchera sur le problème... En
attendant, il est toujours possible d'appeler des scripts Python depuis
VBS.
Bonne soirée.
--
Michel Claveau
Bonjour,
ce problème avait été soulevé ici dans le fil suivant :
http://www.google.com/groups?hl=fr&lr=&thð579ec3cb4ea3ce&rnum=1
Amicalement,
Jean - JMST
Belgium
"Pierre" a écrit dans le message de news:
%C'est bon, ça j'avais compris que si fix ou int donne 0.57 c'est parce
qu'en interne il y a un 0.57999999 quelque part à cause des float.
Ma demande était de savoir s'il n'y avait pas un moyen en vbs de
travailler avec des "decimal" à la place des "double" et autres "single".
"Jean-Claude BELLAMY" a écrit dans le
message de news:Dans le message news: ,
Pierre s'est ainsi exprimé:Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un
nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres
négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne,
c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction
"round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d &
"<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*
Bonjour,
ce problème avait été soulevé ici dans le fil suivant :
http://www.google.com/groups?hl=fr&lr=&thð579ec3cb4ea3ce&rnum=1
Amicalement,
Jean - JMST
Belgium
"Pierre" <pierroozz@freesurf.fr> a écrit dans le message de news:
%239W7BWfDFHA.3648@TK2MSFTNGP10.phx.gbl...
C'est bon, ça j'avais compris que si fix ou int donne 0.57 c'est parce
qu'en interne il y a un 0.57999999 quelque part à cause des float.
Ma demande était de savoir s'il n'y avait pas un moyen en vbs de
travailler avec des "decimal" à la place des "double" et autres "single".
"Jean-Claude BELLAMY" <Jean-Claude.Bellamy@wanadoo.fr> a écrit dans le
message de news: e5tm3VeDFHA.1408@TK2MSFTNGP10.phx.gbl...
Dans le message news:OrRsATdDFHA.3452@TK2MSFTNGP09.phx.gbl ,
Pierre <pierroozz@freesurf.fr> s'est ainsi exprimé:
Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un
nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres
négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne,
c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction
"round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d &
"<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
Jean-Claude.Bellamy@wanadoo.fr * JC.Bellamy@free.fr
Bonjour,
ce problème avait été soulevé ici dans le fil suivant :
http://www.google.com/groups?hl=fr&lr=&thð579ec3cb4ea3ce&rnum=1
Amicalement,
Jean - JMST
Belgium
"Pierre" a écrit dans le message de news:
%C'est bon, ça j'avais compris que si fix ou int donne 0.57 c'est parce
qu'en interne il y a un 0.57999999 quelque part à cause des float.
Ma demande était de savoir s'il n'y avait pas un moyen en vbs de
travailler avec des "decimal" à la place des "double" et autres "single".
"Jean-Claude BELLAMY" a écrit dans le
message de news:Dans le message news: ,
Pierre s'est ainsi exprimé:Bonjour,
Voici un bout de VBScript qui en plus de me dérouter, pose de graves
problèmes à mon client qui effectue des calculs mathématiques
importants :
<html>
<%
dim v, d
v=0.58
d=2
response.write "d = " & d & "<br>"
response.write "v = " & v & "<br>"
response.write "fix(v*10^d)*10^-d = " & fix(v*10^d)*10^-d & "<br>"
response.write "int(v*10^d)*10^-d = " & int(v*10^d)*10^-d & "<br>"
%>
</html>
La sortie de ce code est la suivante :
d = 2
v = 0,58
fix(v*10^d)*10^-d = 0,57
int(v*10^d)*10^-d = 0,57
Ce qui est assez fabuleux vous en conviendrez.
Ah bon ?
Je ne vois pas où est le problème !
"int" et "fix" sont 2 fonctions qui retournent la PARTIE ENTIÈRE d'un
nombre
NB: la différence entre les 2 se situe uniquement au niveau des nombres
négatifs.
int(-14.23) = -15 (le nbre <0 immédiatement inférieur ou égal)
fix(-14.23) = -14 (le nbre <0 immédiatement supérieur ou égal)
Donc ici (nbres >0) , fix et int sont strictement analogues.
Quand tu calcules v*10^d ,j cela donne 58, mais en réalité, en interne,
c'est peut-être 57.999999999
Donc int retourne 57, ce qui est NORMAL.
Si tu veux un arrondi au plus juste, il faut utiliser la fonction
"round"
http://www.bellamyjc.org/fr/vbsfunctions/vsfctround.html
Et là, çà marche ...
response.write "round(v*10^d)*10^-d = " & round(v*10^d)*10^-d &
"<br>"
va afficher 0,58
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*