abracadabraPDF › Forums › PDF – Général › Additioner les arrondis et non les valeurs réelles
- Ce sujet est vide.
-
CréateurSujet
-
23 septembre 2015 à 08:56 #45254
sribera
MembreBonjour
Dans un formulaire PDF comment faire la somme totale des arrondis (qui s’affichent) et non de la valeur réelle des champs, sachant que je suis nulle en Javascript ?
Merci pour votre aide… -
CréateurSujet
-
AuteurRéponses
-
23 septembre 2015 à 09:20 #59642
Merlin
Maître des clésBonjour.
Est-ce que arrondir la somme totale calculée est envisageable ?
23 septembre 2015 à 10:33 #59643sribera
MembreMalheureusement non, la somme totale est déjà arrondie, mais elle ne correspond pas exactement à la somme des arrondis Elle correspond à la somme des valeurs calculées dans les autres champs… Et c’est là mon problème…
:Euuuh: :doute: :oh:23 septembre 2015 à 10:52 #59644Merlin
Maître des clésJe viens d’essayer avec “valueAsString” mais c’est pareil…
:Euuuh:Espérons que quelqu’un saura mieux que moi.
:joker:23 septembre 2015 à 12:40 #59645sribera
MembreN’est-il pas possible que dans mes champs sources qui sont déjà calculés, la valeur du champs soit exactement la valeur arrondie comme elle apparaît à l’écran ? (Je ne sais pas si je suis très claire….)
Je viens d’essayer avec “valueAsString” mais c’est pareil…
:Euuuh:Espérons que quelqu’un saura mieux que moi.
:joker:23 septembre 2015 à 12:58 #59646Merlin
Maître des clésLe problème c’est que la valeur arrondie ne vaut que pour l’affichage, la “vraie” valeur est toujours conservée.
C’est le comportement inverse qui serait pénalisant, c’est pourquoi je trouve que ta question est inhabituelle.23 septembre 2015 à 14:33 #59647sribera
MembreOui je comprends, mais c’est ce qu’on me demande, que le cumul se fasse sur la valeur affichée… Y a t’il un Javascript pour que l’arrondi devienne la “vraie” valeur du champs ? (sachant qu’un arrondi peut être à la hausse comme à la baisse et qu’on ne parle que de quelques dixièmes de centimes).
Le problème c’est que la valeur arrondie ne vaut que pour l’affichage, la “vraie” valeur est toujours conservée.
C’est le comportement inverse qui serait pénalisant, c’est pourquoi je trouve que ta question est inhabituelle.23 septembre 2015 à 14:58 #59648bebarth
Maître des clésbonjour,
j’ai laissé les décimales dans les champs “entiers” pour montrer qu’elles sont bien à 0.
@+
:bonjour:23 septembre 2015 à 15:00 #59649Merlin
Maître des clés:bravo:
24 septembre 2015 à 05:47 #59650bebarth
Maître des clés…maintenant, on peut “simplifier” en supprimant les champs “ENTIER”. On calcul directement le TOTAL à partir des champs “NOMBRE”.
this.getField(“TOTAL”).value = parseInt(this.getField(“NOMBRE1”).value)+ parseInt(this.getField(“NOMBRE2”).value)+…;
@+
:bonjour:24 septembre 2015 à 06:59 #59651sribera
MembreMerci beaucoup, c’est ce que je souhaite faire mais en gardant deux décimales à mes calculs. C’est à dire que si mon nombre est 379,5248 la somme totale devra prendre en compte la valeur 379,52
Est-ce possible d’avoir le Javascript qui ne tient pas compte de la valeur du nombre entier, mais de la valeur du nombre avec deux décimales (et non pas 3, 4, 5… décimales)…maintenant, on peut “simplifier” en supprimant les champs “ENTIER”. On calcul directement le TOTAL à partir des champs “NOMBRE”.
this.getField(“TOTAL”).value = parseInt(this.getField(“NOMBRE1”).value)+ parseInt(this.getField(“NOMBRE2”).value)+…;
@+
:bonjour:24 septembre 2015 à 07:30 #59652bebarth
Maître des clés…et bien, il suffit juste de multiplier chaque nombre par 100 avant d’appliquer “pareInt”, puis de re-diviser par 100 (soit chaque nombre, soit le total) :
this.getField(“TOTAL”).value = (parseInt(this.getField(“NOMBRE1”).value*100)+ parseInt(this.getField(“NOMBRE2”).value*100)+…)/100;
il faudra aussi penser à régler le format d’affichage à 2 décimales !!!
@+
:bonjour:24 septembre 2015 à 08:26 #59653Merlin
Maître des cléssribera, je serais curieux de savoir pourquoi tu as besoin d’effectuer ce type de calcul (sans arrondi et en tronquant les centésimales).
24 septembre 2015 à 09:32 #59654sribera
Membre@ Bebarth
Merci d’avoir pris le temps de me répondre, mais malheureusement ça ne fonctionne pas (ou je n’y comprends vraiment rien) je vous mets en pièce jointe un exemple où on voit parfaitement que la somme ne correspond pas au total des arrondis.
@ Merlin
Je suis d’accord avec vous, mais ON m’a demandé de le faire…24 septembre 2015 à 10:04 #59655bebarth
Maître des clés…c’était pas bien écris !!!
essayez comme ça en rajoutant vos autres champs :
this.getField(“MontantTTC”).value = (parseInt(this.getField(“RGT1”).value*100)+parseInt(this.getField(“RET1”).value*100)+parseInt(this.getField(“RETC1”).value*100))/100;pour chaque nouveau champ, rajoutez :
+parseInt(this.getField(“NOMDUCHAMP”).value*100)
entre les 2 dernière parenthèses.
@+
:bonjour:24 septembre 2015 à 10:30 #59656Merlin
Maître des clésJe suis d’accord avec vous, mais ON m’a demandé de le faire…
J’ai bien compris, ce n’est pas un reproche.
C’est juste le “pourquoi” qui pique ma curiosité.Si jamais ON te l’a expliqué ça m’intéresse.
:Smiley01:24 septembre 2015 à 13:19 #59657sribera
Membre@ bebarth, Merci pour le temps consacré, mais cela ne fonctionne pas (cf exemple sur ton formulaire avec un autre montant)
@ Merlin, je sais que ce n’est pas un reproche, je ne l’ai pas pris comme tel… J’avoue que je ne comprends pas très bien non plus la demande si ce n’est que cela peut faire bizarre de voir que 9,12 – 0.18 – 0.27 = 8,66 (alors que c’est égal à 8,67)24 septembre 2015 à 14:36 #59658bebarth
Maître des clés:mur:
ce que je ne comprend pas, c’est pourquoi le parseInt du champ “montant A” n’est pas toujours correct alors qu’il l’est pour les autre champs !!! 9,12 -> 9,11 alors que 9,11 -> 9,11 ou 9,13 -> 9,13…
si personne (!!!) n’a de solution et que le montant A à toujours 2 décimales, ce que je te est de garder cette valeur dans le total, sans passer par parseIntthis.getField(“MontantTTC”).value = this.getField(“RGT1”).value+ (parseInt(this.getField(“RET1”).value*100)+ parseInt(this.getField(“RETC1”).value*100))/100;
sinon j’aimerai bien savoir le pourquoi !!!
@+
:doute:25 septembre 2015 à 07:28 #59659sribera
MembreBonjour :bravo: :extra: :soleil:
ça y est j’ai trouvé la solution grâce à vous !!!! En fait le problème vient du fait que si on multiplie 3524,1548 par 100 et qu’on le divise par 100 cela donne toujours 3524,1548… Donc il faut le multiplier par 100, en faire un nombre entier, puis le diviser par 100…
Soit 3524,1548 * 100 = 352415,48 ///// Puis nombre entier = 352415,00 ///// Puis divisé par 100 = 3524,15
Mais comme je suis nulle en Javascript je vais devoir insérer des champs masqués (sauf si bien sûr d’après mon principe, vous avez un Javascript plus simple)
Merci en tout cas, je pensais cela impossible…25 septembre 2015 à 08:34 #59660bebarth
Maître des clésbonjour,
Je crois que je vais vous décevoir… votre exemple correspond à peu près au dernier script que j’ai donné hier, c’est à dire que vous ne vous préoccupez plus d’arrondir la valeur du premier champ. Vous supposez (certainement à juste titre) que si cette valeur est entrée manuellement elle n’a que 2 décimales. Essayez exactement votre méthode avec ce premier champ et vous verrez… toujours la même chose avec 9,12 -> 9,11
this.getField(“MontantTTC”).value = this.getField(“RGT1”).value+(parseInt(this.getField(“RET1”).value*100)+parseInt(this.getField(“RETC1”).value*100))/100;… Donc il faut le multiplier par 100, en faire un nombre entier, puis le diviser par 100…
c’est ce qui est fait dans le script, sauf que dans votre exemple vous divisez chaque nombre par 100 alors que moi je divise le total.
j’ai essayez comme il es conseillé d’indiquer la base “parseInt(string,10)” mais pas d’amélioration. j’ai même essayez d’autre méthodes, toujours avec le même résultat !!!
:mur: y a quelque chose que je ne comprend pas…@+
:Euuuh:25 septembre 2015 à 10:31 #59661sribera
MembreJe suis désolée de vous donner autant de tracas :doute:
Je suis aussi nulle en math qu’en Javascript… c’est pas peu dire… Mais le problème entre 9,12 -> 9,11 vient peut-être du fait que parsInt n’arrondit pas vraiment le chiffre mais supprime les décimales (alors que quand on arrondit on peut légèrement augmenter ou baisser le résultat selon les décimales)… Mais ce n’est qu’une supposition…26 septembre 2015 à 11:14 #59662alex
ParticipantBonjour à tous,
Voici ma contribution (une maquette) à votre problème que j’ai repris disons, à la base….Un seul script de calcul associé au champ “Total” fait l’affaire, ici avec 5 termes à additionner.
Pour voir les résultats intermédiaires (console.println), afficher la console.Le nombre de termes et l’ordre de l’arrondi sont des paramétrables.26 septembre 2015 à 11:40 #59663Merlin
Maître des clés:bonjour:
28 septembre 2015 à 08:08 #59664sribera
MembreMerci Alex,
Cette solution fonctionne à merveille…
J’ai juste dû enlever le “.” à terme.1 car mes calculs intermédiaires ne fonctionnaient plus….
Mais j’en ai fait de même dans le total et cela fonctionne parfaitement, en tenant compte des réels arrondis au supérieur comme à l’inférieur…
UN GRAND MERCI :bravo: :bravo: :bravo:28 septembre 2015 à 08:20 #59665bebarth
Maître des clésbonjour,
…et merci à Alex pour sa contribution. Il est (à mon avis) LA référence javascript sur le forum !
Le calcul du total est effectivement regroupé en une seule formule sur le champ TOTAL, mais je pense qu’elle ne correspond pas pour résoudre le problème donné.
Dans l’exemple joint, le calcul de l’arrondi avec “Math.round” donne 2.1 pour une valeur initiale de 2.0976 alors que selon le problème on devrait avoir 2.09 !!
j’avais moi-même essayé avec “Math.floor” sans m’en sortir et sans comprendre… c’est pourquoi j’avais opté pour “parseInt” après avoir multiplié la valeur par 100. mais je ne comprend pas d’où viens l’erreur !!!!
si tu a une idée pour ce problème….
merci.
:bonjour:28 septembre 2015 à 08:22 #59666bebarth
Maître des clésCette solution fonctionne à merveille…
??? la, c’est moi qui suis perdu !!!
:Euuuh: -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.