Donnez vie à vos documents numériques !
 

Calcul JavaScript avec arrondi. – RÉSOLU

abracadabraPDF Forums PDF – Général Calcul JavaScript avec arrondi. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44273
    Gatorx
    Membre

    Bonjour à tous,

    Après multitude de recherches et d’essais infructueux (je suis nul en java mais j’apprends) je vous expose mon problème.
    La cellule “QF” doit être le résultat de la cellule “total” divisée par 12 divisée par “Nombre de parts” et divisée par 100 et en plus arrondi à l’entier le plus proche.
    la formule exel que j’utilisais était =arrondi(g30/12/d33;0)/100    g30=”total et d33= “Nombre de parts.

    Pour le calcul de la “participation agent” elle doit être égal au “QF”(ci-desus) multiplié par 6.559 et divisé par 100 et bien sur arrondi à l’entier le plus proche.
    je vous joints le document que j’ai commencé.

    Par avance merci de l’aide que vous m’apporterez.
    Luc

    [attachment deleted by admin]

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

    Salut,

    La cellule “QF” doit être le résultat de la cellule “total” divisée par 12 divisée par “Nombre de parts” et divisée par 100 et en plus arrondi à l’entier le plus proche.
    la formule exel que j’utilisais était =arrondi(g30/12/d33;0)/100    g30=”total et d33= “Nombre de parts.

    var f = this.getField(“total”).value;
    var g = this.getField(“Nombre-de-Parts”).value;
    if(f != “0” && g != “0”)
    {
    var h = “12”;
    var i = “100”;
    event.value = Math.round(((f/h)/g)/i);
    }
    else {event.value = “”;}

    C’est toujours une bonne idée de protéger le code contre une division par zéro.
    Il y a aussi une autre moyen d’éviter ça : pour le champ Nombre de part on peut utiliser le format “nombre” et imposer une valeur supérieure ou égale à 1.

    Pour le calcul de la “participation agent” elle doit être égal au “QF”(ci-desus) multiplié par 6.559 et divisé par 100 et bien sur arrondi à l’entier le plus proche.

    var f = this.getField(“QF”).value;
    if(f != “” && f != “0”)
    {
    var h = “6.559”;
    var i = “100”;
    event.value = Math.round((f*h)/i);
    }
    else {event.value = “”;}

    Dans ces deux scripts c’est l’instruction Math.round qui arrondi le résultat.
    Dans ton essai, tu faisais appel à deux champs inexistants, et l’ordre de calcul n’était pas bon.

    Exemple ci-joint.

    :Smiley01:

    [attachment deleted by admin]

    #53578
    Merlin
    Maître des clés

    PS : un autre moyen d’arrondir la valeur d’un champ c’est d’utiliser le format “nombre” avec zéro décimale.
    Solution à double-tranchant dans le sens où dans ce cas l’arrondi ne vaut que pour l’affichage, pas pour la (vraie) valeur exportée…

    :idee:

    #53579
    Gatorx
    Membre

    Bonsoir Merlin

    une fois de plus merci pour ta rapidité je decortique tout ça demain pour comprendre la logique (je n’ai pas acrobat pro à la maison) et je te tiens au courant .
    bonne soirée et encore  :bravo: :bravo:

    #53580
    Merlin
    Maître des clés

    Cà ressemble beaucoup à la syntaxe que tu donnes pour Excel, avec Math.round à la place de arrondi
    :Smiley01:

    #53581
    Gatorx
    Membre

    re bonjour Merlin,

    Comme toujours le travail à plusieurs n’est pas toujours le plus simple,,,,,,,,,,,,,,,,,,,,en effet maitenant on me demande que le QF soit deux chiffres après la virgule sans arrondi et la participation en %; fort de l’aide que tu m’as apporter j’ai donc essayer plusieurs solutions qui n’ont malheureusement pas fonctionnées.
    1)Dans le qf j’ai donc supprimer Math.round et modifier le format en nombre cela fonctionne mais si j’utilise le RAZ dés que je complète un champ il ya un message d’erreur : la valeur indiqué ne correpond pas au format du champ qf et le resultat de la participation n’est pas bon.
    2) la participation agent qui doit conserver l’arrondi mais etre en % et bien la cela s’est compliqué et les résultats sont tres vite devenus comment dire …… :Euuuh:
    je te joints mon document exel qui je pense sera plus parlant pour toi.
    Merci du temps que tu voudras bien consacrer à ma demande.

    [attachment deleted by admin]

    #53582
    Gatorx
    Membre

    Merlin

    je me suis permis de reprdre ton travail et de le modifier pour arriver aux résultats esconté (ci-dessus) soit indulgent sur les petites modifs faites ne sont pas conformes mais il n’y a plus que les deux chiffres du QFaprès la virgule à solutionner. je continu à chercher. je joints le doc pdf
    et encore merci pour ta patience.

    [attachment deleted by admin]

    #53583
    Merlin
    Maître des clés

    2) la participation agent qui doit conserver l’arrondi mais etre en %

    Ca c’est le plus simple, il suffit de modifier le script ci-dessus ainsi :

    var f = this.getField(“QF”).value;
    if(f != “” && f != “0”)
    {
    var h = “6.559”;
    var i = “100”;
    event.value = Math.round((f*h)/i) + “ u0025;
    }
    else {event.value = “”;}

    Où l’on ajoute “espace” et “pourcentage (%) après le résultat du calcul, et où % est représenté par son équivalent Unicode u0025 pour s’assurer d’un affichage fiable sur toutes les plateformes (voir : http://abracadabrapdf.net/articles.php?lng=fr&pg=440 ).
    Parce-que comme indiqué dans l’Aide qui s’affiche quand on choisi ce format : le format “pourcentage” proposé par Acrobat n’est pas satisfaisant (valeur systématiquement multipliée par 100).

    Pour la 1re question, je chercherais plus tard, n’ayant pas bien le temps tout de suite.
    A moins qu’un autre expert du JavaScript ne passe par là avant…

    :Smiley01:

    #53584
    Gatorx
    Membre

    Franchement Merlin je ne te remercierais jamais assez de l’aide que tu nous apportes de plus tes infos sont clairs et permettent d’avancer dans la maitrise de l’outil.
    je teste tout ca demain et encore merci.
    Bonne soirée
    :extra: :extra:

    #53585
    Merlin
    Maître des clés

    1)Dans le qf j’ai donc supprimer Math.round et modifier le format en nombre cela fonctionne mais si j’utilise le RAZ dés que je complète un champ il ya un message d’erreur : la valeur indiqué ne correpond pas au format du champ qf et le resultat de la participation n’est pas bon.

    En fait c’est tout bête : ce qu’il faut c’est supprimer le format dans les propriétés du champ, et supprimer une paire de parenthèses dans le script après le Math.round pour obtenir 2 décimales.
    Ce qui nous donne :

    var f = this.getField(“total”).value;
    var g = this.getField(“Nombre-de-Parts”).value;
    // si f ou g est égal à zéro ou à rien
    if(f == “0” || f == “” || g == “” || g == “0”)
    // alors résultat est égal à rien-espace
    {event.value = ” “;}
    // sinon on effectue le calcul
    else
    {
    var h = “12”;
    var i = “100”;
    event.value = Math.round((f/h)/g)/i;
    }

    Par-contre il m’a fallu renverser le script pour ne plus voir la valeur “infinity” s’afficher dans le champ QF tant que le nombre de parts n’était pas défini…
    Je ne suis pas certain d’avoir bien compris pourquoi, mais ça fonctionne ainsi. (Ci-joint).
    :priere:  :joker:

    [attachment deleted by admin]

    #53586
    Merlin
    Maître des clés

    Lien vers le pourquoi du comment de Math.round :
    http://www.javascriptkit.com/javatutors/round.shtml

    :geek:

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