Donnez vie à vos documents numériques !
 

Additioner les arrondis et non les valeurs réelles

abracadabraPDF Forums PDF – Général Additioner les arrondis et non les valeurs réelles

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45254
    sribera
    Membre

    Bonjour
    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…

Affichage de 25 réponses de 1 à 25 (sur un total de 25)
  • Auteur
    Réponses
  • #59642
    Merlin
    Maître des clés

    Bonjour.

    Est-ce que arrondir la somme totale calculée est envisageable ?

    #59643
    sribera
    Membre

    Malheureusement 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:

    #59644
    Merlin
    Maître des clés

    Je viens d’essayer avec “valueAsString” mais c’est pareil…
    :Euuuh:

    Espérons que quelqu’un saura mieux que moi.
    :joker:

    #59645
    sribera
    Membre

    N’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:

    #59646
    Merlin
    Maître des clés

    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.

    #59647
    sribera
    Membre

    Oui 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.

    #59648
    bebarth
    Maître des clés

    bonjour,
    j’ai laissé les décimales dans les champs “entiers” pour montrer qu’elles sont bien à 0.
    @+
    :bonjour:

    #59649
    Merlin
    Maître des clés

    :bravo:

    #59650
    bebarth
    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:

    #59651
    sribera
    Membre

    Merci 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:

    #59652
    bebarth
    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:

    #59653
    Merlin
    Maître des clés

    sribera, je serais curieux de savoir pourquoi tu as besoin d’effectuer ce type de calcul (sans arrondi et en tronquant les centésimales).

    #59654
    sribera
    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…

    #59655
    bebarth
    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:

    #59656
    Merlin
    Maître des clés

    Je 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:

    #59657
    sribera
    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)

    #59658
    bebarth
    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 parseInt

    this.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:

    #59659
    sribera
    Membre

    Bonjour    :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…

    #59660
    bebarth
    Maître des clés

    bonjour,
    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:

    #59661
    sribera
    Membre

    Je 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…

    #59662
    alex
    Participant

    Bonjour à 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.

    #59663
    Merlin
    Maître des clés

    :bonjour:

    #59664
    sribera
    Membre

    Merci 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:

    #59665
    bebarth
    Maître des clés

    bonjour,
    …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:

    #59666
    bebarth
    Maître des clés

    Cette solution fonctionne à merveille…

    ??? la, c’est moi qui suis perdu !!!
    :Euuuh:

Affichage de 25 réponses de 1 à 25 (sur un total de 25)
  • Vous devez être connecté pour répondre à ce sujet.