Donnez vie à vos documents numériques !
 

Erreur de Type NaN pour un champs division

abracadabraPDF Forums PDF – Général Erreur de Type NaN pour un champs division

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45875
    Sky
    Membre

    Bonjour j’ai un problème avec un java de calcul de type (division) que j’ai pris sur ce forum du merveilleux (Merlin!) Merci  :Smiley01:

    Mon problème est entre autre dû à cause des formats de champs (nombre avec 2 décimaux après la virgule) et
    le fait que les champs que je dois diviser sont à zéros. (Une division par zéro… ça ne se fait pas évidemment!)
    J’aurais donc besoin d’un script qui met ma valeur par défaut à 0,00 lorsque les champs n’ont pas encore été remplis par l’utilisateur. Je ne veux pas voir de NaN ou impossible..

    ci-joint des fichiers Test pour les détails.. Je dois diviser les champs suivants :
    this.getField(« P2_Texte50 »).value = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    Le texte 47, est un champ qui additionne les 5 premiers champs (point 6 sur l’imprime-écran ci-joint), et le champs 48 est un champs nombre tout simplement
    Étrangement le script de soustraction utilisé pour le point 8 de l’imprime-écran ci-joint est le même que celui de la division et mon champs ne se met pas à 0,00 par défaut comme celui de la soustraction..
    J’ai besoin de votre aide rapidement, si quelqu’un peut me donner un coup de main pour le Java ça serait vraiment apprécié !

Affichage de 8 réponses de 1 à 8 (sur un total de 8)
  • Auteur
    Réponses
  • #64103
    bebarth
    Maître des clés

    bonjour,

    J’ai besoin de votre aide rapidement, si quelqu’un peut me donner un coup de main pour le Java ça serait vraiment apprécié !

    Comme le ferait le merveilleux et non moins enchanteur Merlin, je commencerai par te conseiller de ne pas confondre Java et JavaScript :
    https://abracadabrapdf.net/forum/index.php/topic,2160.0.html

    En ce qui concerne ton problème, il y a déjà une division en champ P2_Texte46 dont tu ne parles pas. Est-ce normal ???
    Pour le calcul du champ P2_Texte50, voici ce que j’écrirais

    Code:
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity) {
    this.event.target.value = «  »;
    } else {
    this.event.target.value = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    }

    Sur le fichier joint j’ai retiré le calcul du champ P2_Texte46.
    @+
    :bonjour:

    #64104
    Sky
    Membre

    Wow super mille merci!!! Effectivement mon champs 46 n’a pas besoin de calcul… hihi.. Merci !!

    Est-ce qu’il y a un script qui pourrait me donner un format nombre comme mes autres champs (C’est-a-dire, avoir la virgule et deux décimales maximum) lorsque j’ai un résultat qui s’y inscrit. (présentement le script me donne un format 0.000000infini)
      Aussi mon champ qui afficherait une valeur par défaut de 0,00 quand le formulaire n’est pas encore rempli.

    Cela rendrait mon PDF uniforme :) et je serais trop heureuse !! :D :priere:

    #64105
    bebarth
    Maître des clés

    bonjour,
    quelque chose comme ça (à adapter) :

    Code:
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity) {
    this.event.target.value = «  »;
    } else {
    var num=this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    var entier=Math.floor(num);
    var plus = num-entier;
    switch(plus==0) {
        case false:
            if(((plus*10)-5)        } else {
            var decimale=0;
            var entier = entier+1}
            break;
        case true:
            var decimale=0;
            break;
    }
    this.event.target.value =entier+ », »+decimale;
    }

    je reviens plus tard…
    …le script indiqué arrondit la décimale à 0 ou 5.
    @+
    :bonjour:

    #64106
    bebarth
    Maître des clés

    re-bonjour,
    Après réflexion, il suffit simplement de modifier le format du champ (cf. copie d’écran) !!!

    Mais pourquoi faire simple quand on peut faire compliqué ?
    Tu peux laisser le format du champ tel quel et modifier le script :

    Code:
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity) {
    this.event.target.value = «  »;
    } else {
    var num = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
    var n = num.toFixed(2);
    var num = n;
    var n = num.toString();
    var str = n;
    var res = str.replace(« . », « , »);
    this.event.target.value =res;
    }

    @+
    :bonjour:

    PS : …et ici on parle JavaScript et non Java. Alors un petit effort !

    #64107
    Sky
    Membre

    Désolée ! Je n’y connais pas grand chose en JavaScript, j’attends une formation sous peu pour la base.. Ça ne me fera pas de tord ! Je dois dépanner quelqu’un et je suis capable de le lire un peu mais pas d’en créer pour le moment  :mur: … Ton aide est grandement appréciée !!!  :soleil:

    Dernier petit problème à ce sujet…
    Lorsque j’entre des valeurs négatives dans les champs qui font partis du calcul pour ma division.. j’ai un erreur dans une fenêtre JavaScript qui me dit que la valeur indiquée ne correspond pas au format du champs…. C’est pourquoi je n’avais pas mis le format (nombre)  :oh: L’utilisateur du formulaire aura parfois des valeurs négatives à inscrire. Crois-tu pouvoir m’aider?  :priere:

    #64108
    bebarth
    Maître des clés

    bonjour,
    A ce moment là, tu prends la version sans modifier le format du champ, et dans la condition tu rajoutes :
    … || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==-Infinity
    Ce qui donne une nouvelle version compliquée mais expliquée :
    Script légèrement modifié/simplifié par rapport à celui posté ce matin -> Fichier correspondant.

    Code:
    // si le résultat de la division n’est pas un nombre ou est ± l’infini
    if (isNaN(this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value) || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==Infinity || (this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value)==-Infinity) {
        this.event.target.value = «  »; // alors le champ est vide
    } else { // sinon, division
        var nombre = this.getField(« P2_Texte47 »).value / this.getField(« P2_Texte48 »).value;
        var arrondi = nombre.toFixed(2); // 2 pour arrondir à 2 décimales
        var nombre = arrondi;
        var chaine = nombre.toString(); // conversion du nombre en chaine de caractères
        var resultat = chaine.replace(« . », « , »); // remplace le point par une virgule
        this.event.target.value = resultat; // valeur de ce champ
    }

    Merci pour le « JavaScript » !  :bravo:
    @+
    :bonjour:

    #64109
    Sky
    Membre

    WOW!! un vrai génie !
    Grâce à toi mon fichier est fonctionnel !!  :extra:  Merci beaucoup !! :soleil:

    En espérant que j’améliore mes connaissances prochainement ! J’aimerais bien pouvoir créer un JavaScript un jour !

    Merci encore !

    #64110
    Merlin
    Maître des clés

    J’ai commencé par modifier les scripts des autres et je me suis autoformé grâce à tous ceux qui sont cités ici : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/ressources-pdf-javascript/

    Et voilà le résultat, je vais bientôt passer mon examen de JediScript.
    :Smiley15:

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