J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec des
flottants, mais l'arrondi fausse mes résultats, par exemple :
var plage1 = 4.30;
var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
var nbTaches = 48.00;
var ratio = nbTaches / nbHeures; // Renvoie 10.46 au lieu de 9.6
Je précise que les plages d'heures sont calculées via une fonction faisant
appel à des modulos (voir sujet "Additionner des heures", merci Olivier!).
Verriez-vous comment contourner ce problème ? J'ai essayé var nbHeures =
parseFloat(plage1 + plage2 + 0.01), mais le résultat reste le même.
Il me semble que PHP apporte le même problème :
(int) 8.0 => 7 car PHP stocke en interne 8.0 comme 7.99999.....9.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec des flottants, mais l'arrondi fausse mes résultats,
C'est classique avec les flottants.
par exemple :
var plage1 = 4.30; var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
De toute façon, ça ne peut pas donner 5.0. Utiliser des flottants pour représenter les heures me semble assez farfelu...
Tu peux utiliser deux entiers : var heuresPlage1 = 4; var minutesPlage1 = 30;
Ou alors tout stocker en minutes : var plage1 = 270;
Mais tu peux aussi créer une classe pour ça.
Je précise que les plages d'heures sont calculées via une fonction faisant appel à des modulos (voir sujet "Additionner des heures", merci Olivier!).
Ah, c'était déjà toi ? ;-) Là je vois que tu veux non seulement additionner des heures mais aussi les diviser. Pour faire ça, note que 4 h 30 mn ça fait 4,5 h et pas 4,3 h !
Verriez-vous comment contourner ce problème ?
1) N'utiliser que des entiers pour des calculs exacts. 2) Faire heureFloat = heureInt + (minInt / 60) pour les divisions.
J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec des
flottants, mais l'arrondi fausse mes résultats,
C'est classique avec les flottants.
par exemple :
var plage1 = 4.30;
var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
De toute façon, ça ne peut pas donner 5.0. Utiliser des flottants pour
représenter les heures me semble assez farfelu...
Tu peux utiliser deux entiers :
var heuresPlage1 = 4;
var minutesPlage1 = 30;
Ou alors tout stocker en minutes :
var plage1 = 270;
Mais tu peux aussi créer une classe pour ça.
Je précise que les plages d'heures sont calculées via une fonction faisant
appel à des modulos (voir sujet "Additionner des heures", merci Olivier!).
Ah, c'était déjà toi ? ;-)
Là je vois que tu veux non seulement additionner des heures mais aussi
les diviser. Pour faire ça, note que 4 h 30 mn ça fait 4,5 h et pas
4,3 h !
Verriez-vous comment contourner ce problème ?
1) N'utiliser que des entiers pour des calculs exacts.
2) Faire heureFloat = heureInt + (minInt / 60) pour les divisions.
J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec des flottants, mais l'arrondi fausse mes résultats,
C'est classique avec les flottants.
par exemple :
var plage1 = 4.30; var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
De toute façon, ça ne peut pas donner 5.0. Utiliser des flottants pour représenter les heures me semble assez farfelu...
Tu peux utiliser deux entiers : var heuresPlage1 = 4; var minutesPlage1 = 30;
Ou alors tout stocker en minutes : var plage1 = 270;
Mais tu peux aussi créer une classe pour ça.
Je précise que les plages d'heures sont calculées via une fonction faisant appel à des modulos (voir sujet "Additionner des heures", merci Olivier!).
Ah, c'était déjà toi ? ;-) Là je vois que tu veux non seulement additionner des heures mais aussi les diviser. Pour faire ça, note que 4 h 30 mn ça fait 4,5 h et pas 4,3 h !
Verriez-vous comment contourner ce problème ?
1) N'utiliser que des entiers pour des calculs exacts. 2) Faire heureFloat = heureInt + (minInt / 60) pour les divisions.
Jérémie
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si "Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec des flottants, mais l'arrondi fausse mes résultats,
C'est classique avec les flottants.
par exemple :
var plage1 = 4.30; var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
De toute façon, ça ne peut pas donner 5.0. Utiliser des flottants pour représenter les heures me semble assez farfelu...
Tu peux utiliser deux entiers : var heuresPlage1 = 4; var minutesPlage1 = 30;
Ou alors tout stocker en minutes : var plage1 = 270;
Mais tu peux aussi créer une classe pour ça.
Je précise que les plages d'heures sont calculées via une fonction faisant appel à des modulos (voir sujet "Additionner des heures", merci Olivier!).
Ah, c'était déjà toi ? ;-) Là je vois que tu veux non seulement additionner des heures mais aussi les diviser. Pour faire ça, note que 4 h 30 mn ça fait 4,5 h et pas 4,3 h !
Verriez-vous comment contourner ce problème ?
1) N'utiliser que des entiers pour des calculs exacts. 2) Faire heureFloat = heureInt + (minInt / 60) pour les divisions.
Pourrait-on alors envisager un test du genre :
si partie Minutes Y alors
// passer à l'heure arrondie suivante
fin_si
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
462884d2$1@neottia.net...
J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec
des
flottants, mais l'arrondi fausse mes résultats,
C'est classique avec les flottants.
par exemple :
var plage1 = 4.30;
var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
De toute façon, ça ne peut pas donner 5.0. Utiliser des flottants pour
représenter les heures me semble assez farfelu...
Tu peux utiliser deux entiers :
var heuresPlage1 = 4;
var minutesPlage1 = 30;
Ou alors tout stocker en minutes :
var plage1 = 270;
Mais tu peux aussi créer une classe pour ça.
Je précise que les plages d'heures sont calculées via une fonction
faisant
appel à des modulos (voir sujet "Additionner des heures", merci
Olivier!).
Ah, c'était déjà toi ? ;-)
Là je vois que tu veux non seulement additionner des heures mais aussi
les diviser. Pour faire ça, note que 4 h 30 mn ça fait 4,5 h et pas
4,3 h !
Verriez-vous comment contourner ce problème ?
1) N'utiliser que des entiers pour des calculs exacts.
2) Faire heureFloat = heureInt + (minInt / 60) pour les divisions.
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si "Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
J'ai remarqué un "problème" d'arrondi sous JS : je calcule un ratio avec des flottants, mais l'arrondi fausse mes résultats,
C'est classique avec les flottants.
par exemple :
var plage1 = 4.30; var plage2 = 0.30;
var nbHeures = plage1 + plage2; // Donne 4.59 et pas 5.0 !
De toute façon, ça ne peut pas donner 5.0. Utiliser des flottants pour représenter les heures me semble assez farfelu...
Tu peux utiliser deux entiers : var heuresPlage1 = 4; var minutesPlage1 = 30;
Ou alors tout stocker en minutes : var plage1 = 270;
Mais tu peux aussi créer une classe pour ça.
Je précise que les plages d'heures sont calculées via une fonction faisant appel à des modulos (voir sujet "Additionner des heures", merci Olivier!).
Ah, c'était déjà toi ? ;-) Là je vois que tu veux non seulement additionner des heures mais aussi les diviser. Pour faire ça, note que 4 h 30 mn ça fait 4,5 h et pas 4,3 h !
Verriez-vous comment contourner ce problème ?
1) N'utiliser que des entiers pour des calculs exacts. 2) Faire heureFloat = heureInt + (minInt / 60) pour les divisions.
Olivier Miakinen
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et sans surprises.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> :-p
Pourrait-on alors envisager un test du genre :
si partie Minutes Y alors
// passer à l'heure arrondie suivante
fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code
mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les
chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et
sans surprises.
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
462884d2$1@neottia.net...
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement :
<http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
:-p
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et sans surprises.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> :-p
Jérémie
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et sans surprises.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> :-p
Je viens de penser à un truc, merci de ton avis :
Convertir les flottants en minutes (donc en entiers) avant de les additionner. Multiplier ensuite le nombre de tâches par 60 (histoire de garder les mêmes échelles , puis effectuer le calcul du ratio (nbActes/NbMinutes).
Jérémie
Pourrait-on alors envisager un test du genre :
si partie Minutes Y alors
// passer à l'heure arrondie suivante
fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code
mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les
chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et
sans surprises.
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
462884d2$1@neottia.net...
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement :
<http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
:-p
Je viens de penser à un truc, merci de ton avis :
Convertir les flottants en minutes (donc en entiers) avant de les
additionner. Multiplier ensuite le nombre de tâches par 60 (histoire de
garder les mêmes échelles , puis effectuer le calcul du ratio
(nbActes/NbMinutes).
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et sans surprises.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> :-p
Je viens de penser à un truc, merci de ton avis :
Convertir les flottants en minutes (donc en entiers) avant de les additionner. Multiplier ensuite le nombre de tâches par 60 (histoire de garder les mêmes échelles , puis effectuer le calcul du ratio (nbActes/NbMinutes).
Jérémie
Jérémie
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un endroit bien spécifique, en retranchant une minute, quels soient les minutes additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre endroit, ce sont carrément deux minutes qui sautent ... Firebug, viens à mon aide ! "Olivier Miakinen" <om+ a écrit dans le message de news: 46288e06$
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et sans surprises.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> :-p
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un
endroit bien spécifique, en retranchant une minute, quels soient les minutes
additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre
endroit, ce sont carrément deux minutes qui sautent ... Firebug, viens à mon
aide !
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
46288e06$1@neottia.net...
Pourrait-on alors envisager un test du genre :
si partie Minutes Y alors
// passer à l'heure arrondie suivante
fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code
mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les
chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et
sans surprises.
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de
news:
462884d2$1@neottia.net...
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement :
<http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
:-p
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un endroit bien spécifique, en retranchant une minute, quels soient les minutes additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre endroit, ce sont carrément deux minutes qui sautent ... Firebug, viens à mon aide ! "Olivier Miakinen" <om+ a écrit dans le message de news: 46288e06$
Pourrait-on alors envisager un test du genre : si partie Minutes Y alors // passer à l'heure arrondie suivante fin_si
Oui, tu peux toujours envisager de rajouter des bidouilles dans un code mal fichu pour colmater les fuites d'un côté, mais alors ça a toutes les chances de fuir de l'autre.
Mais il vaudrait quand même mieux écrire directement un code simple et sans surprises.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462884d2$
[ citation intégrale ]
Tu peux aussi apprendre à citer efficacement : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> :-p
Olivier Miakinen
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un endroit bien spécifique, en retranchant une minute, quels soient les minutes additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre endroit, ce sont carrément deux minutes qui sautent ...
Tandis que si tu additionnais des entiers tu aurais *toujours* le bon résultat (sauf à frôler les millions de milliards de minutes, bien sûr).
Ainsi, 23 + 23 = 46, pas 45.
"Olivier Miakinen" <om+ a écrit dans le message de news: 46288e06$
[ citation intégrale, y compris : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> ]
De toute façon je vois bien que tu te fiches de ce que je peux te répondre, puisque tu continues à citer l'intégralité de ce à quoi tu réponds (ou ne réponds pas, d'ailleurs), qui plus est à l'envers.
La prochaine fois, ton article va à la poubelle tout de suite.
Halte à la porcinographie : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un
endroit bien spécifique, en retranchant une minute, quels soient les minutes
additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre
endroit, ce sont carrément deux minutes qui sautent ...
Tandis que si tu additionnais des entiers tu aurais *toujours* le bon
résultat (sauf à frôler les millions de milliards de minutes, bien sûr).
Ainsi, 23 + 23 = 46, pas 45.
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
46288e06$1@neottia.net...
[ citation intégrale, y compris :
<http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
]
De toute façon je vois bien que tu te fiches de ce que je peux te
répondre, puisque tu continues à citer l'intégralité de ce à quoi tu
réponds (ou ne réponds pas, d'ailleurs), qui plus est à l'envers.
La prochaine fois, ton article va à la poubelle tout de suite.
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un endroit bien spécifique, en retranchant une minute, quels soient les minutes additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre endroit, ce sont carrément deux minutes qui sautent ...
Tandis que si tu additionnais des entiers tu aurais *toujours* le bon résultat (sauf à frôler les millions de milliards de minutes, bien sûr).
Ainsi, 23 + 23 = 46, pas 45.
"Olivier Miakinen" <om+ a écrit dans le message de news: 46288e06$
[ citation intégrale, y compris : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> ]
De toute façon je vois bien que tu te fiches de ce que je peux te répondre, puisque tu continues à citer l'intégralité de ce à quoi tu réponds (ou ne réponds pas, d'ailleurs), qui plus est à l'envers.
La prochaine fois, ton article va à la poubelle tout de suite.
Halte à la porcinographie : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
Jérémie
Contournement possible trouvé, testé et approuvée :
rajout de 0.001, avec les Math.floor() disposés dans la fonction précedemment donnée pour l'addition des minutes, on retombe toujours sur le bon résultat.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462cb419$
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un endroit bien spécifique, en retranchant une minute, quels soient les minutes additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre endroit, ce sont carrément deux minutes qui sautent ...
Tandis que si tu additionnais des entiers tu aurais *toujours* le bon résultat (sauf à frôler les millions de milliards de minutes, bien sûr).
Ainsi, 23 + 23 = 46, pas 45.
"Olivier Miakinen" <om+ a écrit dans le message de news: 46288e06$
[ citation intégrale, y compris : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> ]
De toute façon je vois bien que tu te fiches de ce que je peux te répondre, puisque tu continues à citer l'intégralité de ce à quoi tu réponds (ou ne réponds pas, d'ailleurs), qui plus est à l'envers.
La prochaine fois, ton article va à la poubelle tout de suite.
Halte à la porcinographie : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
Contournement possible trouvé, testé et approuvée :
rajout de 0.001, avec les Math.floor() disposés dans la fonction
précedemment donnée pour l'addition des minutes, on retombe toujours sur le
bon résultat.
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news:
462cb419$1@neottia.net...
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à
un
endroit bien spécifique, en retranchant une minute, quels soient les
minutes
additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre
endroit, ce sont carrément deux minutes qui sautent ...
Tandis que si tu additionnais des entiers tu aurais *toujours* le bon
résultat (sauf à frôler les millions de milliards de minutes, bien sûr).
Ainsi, 23 + 23 = 46, pas 45.
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de
news:
46288e06$1@neottia.net...
[ citation intégrale, y compris :
<http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/>
]
De toute façon je vois bien que tu te fiches de ce que je peux te
répondre, puisque tu continues à citer l'intégralité de ce à quoi tu
réponds (ou ne réponds pas, d'ailleurs), qui plus est à l'envers.
La prochaine fois, ton article va à la poubelle tout de suite.
Contournement possible trouvé, testé et approuvée :
rajout de 0.001, avec les Math.floor() disposés dans la fonction précedemment donnée pour l'addition des minutes, on retombe toujours sur le bon résultat.
"Olivier Miakinen" <om+ a écrit dans le message de news: 462cb419$
Attends, je viens de remarquer un truc bizarre.. Ce décalage se produit à un endroit bien spécifique, en retranchant une minute, quels soient les minutes additionnées, par exemple, 0.23 + 0.23 = 0.45, jamais 0.46, et à un autre endroit, ce sont carrément deux minutes qui sautent ...
Tandis que si tu additionnais des entiers tu aurais *toujours* le bon résultat (sauf à frôler les millions de milliards de minutes, bien sûr).
Ainsi, 23 + 23 = 46, pas 45.
"Olivier Miakinen" <om+ a écrit dans le message de news: 46288e06$
[ citation intégrale, y compris : <http://www.faqs.org/faqs/fr/usenet/repondre-sur-usenet/> ]
De toute façon je vois bien que tu te fiches de ce que je peux te répondre, puisque tu continues à citer l'intégralité de ce à quoi tu réponds (ou ne réponds pas, d'ailleurs), qui plus est à l'envers.
La prochaine fois, ton article va à la poubelle tout de suite.