Erreur de Type NaN pour un champs division  (Lu 420 fois) Partager ce sujet Imprimer

1 B


Sky  12 juin 2018 : 04:08

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é !

IP archivée


bebarth  12 juin 2018 : 08:09

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

IP archivée


Sky  12 juin 2018 : 17:33

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:

IP archivée


bebarth  12 juin 2018 : 17:54

bonjour,
quelque chose comme ça (à adapter) :
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)<=0) {var decimale=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:

IP archivée


bebarth  12 juin 2018 : 21:27

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

IP archivée


Sky  13 juin 2018 : 05:30

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:

IP archivée


bebarth  13 juin 2018 : 08:07

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

IP archivée


Sky  13 juin 2018 : 22:35

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 !

IP archivée


Merlin  14 juin 2018 : 20:01

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:

IP archivée