OVH Cloud OVH Cloud

pour finir avec le tronquage

10 réponses
Avatar
Fallen Angel
Nikel merci sa marche tres bien math.floor() vu que mon nombre ne peut etre
que positif
Merci

10 réponses

Avatar
ASM
Nikel merci sa marche tres bien math.floor() vu que mon nombre ne peut etre
que positif


Super ! tout est bien qui finit bien :-)

il y a aussi

nombre = parseInt(nombre);

pour n'avoir que la partie entière d'un nombre
(ou d'une chaine avec du numérique)



--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Francis Spiesser
ASM a formulé ce dimanche :
Nikel merci sa marche tres bien math.floor() vu que mon nombre ne peut etre
que positif


Super ! tout est bien qui finit bien :-)

il y a aussi

nombre = parseInt(nombre);

pour n'avoir que la partie entière d'un nombre
(ou d'une chaine avec du numérique)


nombre = parseInt(nombre,10);

Ca évite des surprises...

--
______
Francis (enlever .NIPUBNISOUMIS)
"Tout corps plongé dans la baignoire fait sonner le téléphone"


Avatar
Olivier Miakinen
Le 10/10/2005 19:47, Francis Spiesser répondait à ASM :

nombre = parseInt(nombre);

pour n'avoir que la partie entière d'un nombre
(ou d'une chaine avec du numérique)


nombre = parseInt(nombre,10);

Ca évite des surprises...


Il y a des surprises avec les deux.

parseInt(0.0000015) = parseInt(0.0000015, 10) = 0
parseInt(0.00000015) = parseInt(0.00000015, 10) = 1
parseInt(100000000000000000000.05 [,10] ) = 100000000000000000000
parseInt(1000000000000000000000.5 [,10] ) = 1

Je préfère Math.floor et Math.ceil

--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9


Avatar
Francis Spiesser
Il y a des surprises avec les deux.

parseInt(0.0000015) = parseInt(0.0000015, 10) = 0
parseInt(0.00000015) = parseInt(0.00000015, 10) = 1
parseInt(100000000000000000000.05 [,10] ) = 100000000000000000000
parseInt(1000000000000000000000.5 [,10] ) = 1

Je préfère Math.floor et Math.ceil


Et :
parseInt('012') -> 10
parseInt('012',10) -> 12

;-)

--
______
Francis (enlever .NIPUBNISOUMIS)
"La dinde est tolérante, mais elle déteste les farceurs"

Avatar
Olivier Miakinen

parseInt(0.00000015) = 1
parseInt(1000000000000000000000.5) = 1


Et :
parseInt('012') -> 10
parseInt('012',10) -> 12


Oui, mais Fallen a un nombre au départ, et le toString() automatique sur
un nombre ne rajoute jamais un 0 devant un chiffre non nul. Du coup,
préciser la base n'est pas obligatoire. En revanche, avec des nombres
trop petits ou trop grands, même en précisant que l'on est en base 10,
la fonction parseInt() retourne un résultat faux.

--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9


Avatar
Dr John Stockton
JRS: In article <digo7c$2k95$, dated Tue, 11 Oct
2005 18:13:18, seen in news:fr.comp.lang.javascript, Olivier Miakinen
<om+ posted :

parseInt(0.00000015) = 1
parseInt(1000000000000000000000.5) = 1





En revanche, avec des nombres
trop petits ou trop grands, même en précisant que l'on est en base 10,
la fonction parseInt() retourne un résultat faux.


Actuellement, ce n'est pas vrai.

Fonction parseInt desire un premier parameter de type String; c'est
absolument necessaire. String(1000000000000000000000.5) donne "1e+22",
qui contient l'integer "1" suivi par un character "e" que ne peut point
etre un partie d'un integer decimal. Meme avec les petits nombres.


parseInt(1000000000000000000000.5) -> 1
parseInt("1000000000000000000000.5") -> 1e+21

Je n'ai aucun spelling/grammar-checker Francais. :-{

===
Contemplez
D1 = new Date()
// ...
D2 = new Date( D1) // lent
D3 = new Date(+D1) // vite

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.



Avatar
Olivier Miakinen

parseInt(0.00000015) = 1
parseInt(1000000000000000000000.5) = 1



En revanche, avec des nombres
trop petits ou trop grands, même en précisant que l'on est en base 10,
la fonction parseInt() retourne un résultat faux.


Fonction parseInt desire un premier parameter de type String; c'est
absolument necessaire. String(1000000000000000000000.5) donne "1e+22",
qui contient l'integer "1" suivi par un character "e" que ne peut point
etre un partie d'un integer decimal. Meme avec les petits nombres.


Soit. Mais monsieur ou madame ou mademoiselle Angel (je suis désolé, je
ne connais pas le prénom Fallen) voulait tronquer un *nombre*. J'avais
proposé Math.floor ou Math.ceil selon son signe, mais ASM a proposé
parseInt(nombre), avec donc une conversion implicite en string. Or, dans
ce cas, les nombres trop grands ou trop petits donnent un résultat faux.

parseInt(1000000000000000000000.5) -> 1
parseInt("1000000000000000000000.5") -> 1e+21


La question devient : si l'on veut vraiment utiliser parseInt(), comme
traduire le nombre en chaîne afin d'éviter le problème ?

<HS>
Contemplez
D1 = new Date()
// ...
D2 = new Date( D1) // lent
D3 = new Date(+D1) // vite


Amusant.
<HS>

--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
<http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9>




Avatar
Francis Spiesser

Soit. Mais monsieur ou madame ou mademoiselle Angel (je suis désolé, je
ne connais pas le prénom Fallen)


Fallen Angel -> ange déchu

--
______
Francis (enlever .NIPUBNISOUMIS)
Algèbre gouvernementale : 12 mi-nistres, ça fait 6 nistres

Avatar
Olivier Miakinen


Soit. Mais monsieur ou madame ou mademoiselle Angel (je suis désolé, je
ne connais pas le prénom Fallen)


Fallen Angel -> ange déchu


Ah ! :-)

Pourtant, je trouvais que c'était un joli prénom, « Fallen ». Tant pis,
je me contenterai donc d'un pseudo ridicule au lieu d'un joli prénom...

[ suivi chez moi pour ne pas prolonger le HS ]

--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
<http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9>


Avatar
Dr John Stockton
JRS: In article <dihev0$1gs6$, dated Wed, 12 Oct
2005 00:37:03, seen in news:fr.comp.lang.javascript, Olivier Miakinen
<om+ posted :

Soit. Mais monsieur ou madame ou mademoiselle Angel (je suis désolé, je
ne connais pas le prénom Fallen)


Il y a une livre "Fallen Angels", par Larry Niven - c'est SF.

voulait tronquer un *nombre*. J'avais
proposé Math.floor ou Math.ceil selon son signe, mais ASM a proposé
parseInt(nombre), avec donc une conversion implicite en string. Or, dans
ce cas, les nombres trop grands ou trop petits donnent un résultat faux.

parseInt(1000000000000000000000.5) -> 1
parseInt("1000000000000000000000.5") -> 1e+21


La question devient : si l'on veut vraiment utiliser parseInt(),


on manque de sagacite.


comme
traduire le nombre en chaîne afin d'éviter le problème ?


Parce-que un IEEE Double possede seulement 53 bits de mantissa, tronquer
Number 1000000000000000000000.5 est inexact; car javascript
1000000000000000000000.5 + 1e6 == 1000000000000000000000.5

Si il y a un String S = "1000000000000000000000.5rhubarbe" , on peut se
servir de

N = +S.replace(/^([d.]+).*/, "$1")
ou N = +S.replace(/^(d+).*/, "$1")

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.