|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : mars 2007 Messages : 221 ![]() |
Bonjour à tous,
J'utilise une fonction permettant de tronquer (Math.floor()) un nombre représentant le montant TTC . Seulement voilà pour le cas d'un nombre étant égal à 60, lorsque je muliplie ce dernier par 1.196 en utilisant la fonction Floor pour tronquer. J'obtiens 71,75 en effectuant le code suivant : Code :
Le code que j'utilise est sous environnement ASP Javascript . Cordialement. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2011 Messages : 2 933 ![]() |
Bonsoir,
pourquoi ne pas utiliser Math.round? <EDIT> ou toFixed(2) </EDIT> |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 221 ![]() |
Je ne voudrais pas utiliser d'arrondi, c'est pour des raisons de comptabilités et ne souhaite que tronquer les nombres .
Par exemple pour 15.148855 je voudrais obtenir un nombre 15.14 mais pas 15.15 . Cordialement . |
|
|
00
|
|
|
#4 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
Le souci provient de la virgule flottante en javascript
pour javascript 60 * 1.196 = 71.75999999999 il te faut donc corriger ceci pour js: Math.round(ht*1.196*100)/100) et en y ajoutant ton floor: Math.floor(Math.round(ht*1.196*100))/100
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#5 | |||
![]() ![]() Inscription : janvier 2011 Messages : 2 933 ![]() |
Citation:
Le rajout de Math.round ne répondra pas au problème, il existe une alternative, pour tronquer s'entends, et de diviser la division faisant "moins" d'erreur, mais comme elle en fait aussi il suffit de garder la plus grande des valeurs. Petit code d'exemple Code :
|
|||
|
|
00
|
|
|
#6 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
Code :
Math.round ne répondra pas au problème,
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#7 | ||
![]() ![]() Inscription : janvier 2011 Messages : 2 933 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#8 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
Attention NoSMo il y a deux niveaux
son souhait de troncage ne concerne pas la virgule flottante ... il faut d'abord parer au souci de virgule flottante avec d'appliquer son troncage, enfin d'après ce que j'ai compris de sa demande .
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 221 ![]() |
Merci à vous .
C'est bien celà NoSmoking le but est d'avoir une fonction permettant de tronquer un montant par exemple : 12.34999 => 12.34 . J'opte pour la solution de NoSmoking . A bientôt . |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 854 ![]() |
heu ...
réponse : Code :
explications : pour éviter les problèmes des virgules flottantes et mauvais arrondis, effectuez toujours vos multiplications entières avant vos divisions et multiplications non-entières. les lignes de codes sont toujours interprétées de gauche à droite (pour les opérateurs de même poid) donc voila ! il suffisait de permettuer 2 éléments dans ton opération. ^^ |
||
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 854 ![]() |
Citation:
Citation:
floor(round(value)); le floor n'aura plus aucun effet après ton round qui renverra un nombre entier(sans virgule). ce que tu fais, reviens donc à un simple "round". Quant à la solution de noSmoking, elle est un peu "longue". (CMB) |
||
|
|
00
|
|
|
#12 | ||||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
en fait j'ai omis un niveau de parenthèses
la correction de la virgule flottante peut se faire avec le round en fonction du nombre de décimales voulues : Code :
Code :
montantTTC = Math.floor( (math.round(montantHT*1.196*100)/100) *100)/100; demo: Code :
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||||
|
|
00
|
|
|
#13 | |||||||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 854 ![]() |
Citation:
Code :
honnêtement y'avait de l'idée ! mon cerveau aussi tente de me convaincre qu'il existe une solution dans le genre de ce que tu proposes ... ps: de toute façon, il n'y aura pas de solution plus optimale que la mienne : "placer les opérations dans le bon ordre ! " Code :
|
|||||||||
|
|
00
|
|
|
#14 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
heu ????
Code :
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#15 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 854 ![]() |
Citation:
.9999 et non pas .999 |
|||
|
|
00
|
|
|
#16 |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
mouarf pas fait exprès en plus ...
mais du coup : Code :
var foo= Math.floor( (Math.round(montantHT*.9999*1000)/1000) *100)/100;
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
00
|
|
|
#17 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 854 ![]() |
Citation:
et si tu mets le nombre maximum de zéros dès le départ, ça ne gère plus les erreurs de virgules flottantes : 1.196*60 = 71.76 // et non pas 71.75999999999999999 voici un exemple de tous les cas. ![]() Code :
|
|||
|
|
00
|
|
|
#18 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
Code :
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#19 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 854 ![]() |
Citation:
![]() mais ça devient presque aussi tordu que la solution de noSmoking ![]() edit: sinon simple curiosité de ma part : pq des doubles parenthèses pour le alert(foo) ? |
|||
|
|
01
|
|
|
#20 | |
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
Citation:
il suffisait juste de la formaliser jusqu'au bout
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com