NaN Fehler vermeiden (durch leere Quellbereiche)

Fragen & Antworten zur Steuerung von 3D Inhalten in PDFs über JavaScript
Antworten
mauersegler
Beiträge: 22
Registriert: 03.10.2013, 19:26

NaN Fehler vermeiden (durch leere Quellbereiche)

Beitrag von mauersegler » 09.10.2013, 10:48

Ich habe Probleme mit einem Feld in dem ein Prozentwert ausgerechnet werden soll. Das Problem ist, dass er bestimmte Zellen abfragt, die häufig leer sind, weshalb nicht nur an der Stelle des Prozentwerts ein unschönes "NaN" erscheint, sondern man beim Ausfüllen des Formulars ständig Warnfenster bekommt, dass der eingegebene Wert nicht mit dem Format des Prozent-Feldes übereinstimmt.

Das fragliche Feld, welches Probleme bereitet, ist das Feld das den Rabatt in Prozent anzeigen soll (RabProz). Es errechnet den Prozentwert aus folgenden Feldern:

RabattEingabe / (Gesamtsumme - Versandkosten - Auftragsgebühr) * 100

Jetzt brauche ich einen Code der tolerant demgegenüber ist, dass die abgefragten Felder manchmal leer sind.

Hier ist mein Ansatz.
Die Logik ist noch nicht ganz richtig, aber ich komm nicht auf die Lösung.

Code: Alles auswählen

(function () {

    var v1 = getField("RabEing").value;
    var v2 = getField("Gesa").value;
    var v2 = getField("VerS").value;
    var v2 = getField("AufT").value;

    if (v1 !== 0 || v2 !==0 || v3 !==0 || v4 !==0) {
        event.value = v1 / (v2 - v3 - v4) * 100;
    } else {
        event.value = "";
    }

})();

mauersegler
Beiträge: 22
Registriert: 03.10.2013, 19:26

NaN Fehler vermeiden (durch leere Quellbereiche)

Beitrag von mauersegler » 09.10.2013, 11:03

Oder kann ich mir den ganzen Quatsch sparen und stattdessen im Feld "Rabatt-Eingabe" standardmäßig eine Null ausgeben lassen? Denn die anderen Felder stehen ja schon auf Null, was ja keinen Fehler prduzieren dürfte.

Kann es grad nicht ausprobieren.

Benutzeravatar
Merklin
Beiträge: 1857
Registriert: 04.04.2009, 17:03

NaN Fehler vermeiden (durch leere Quellbereiche)

Beitrag von Merklin » 09.10.2013, 17:13

Hallo,

es wäre schön wenn du uns dein Script mal genauer erläutern würdest.

Mir fällt nur auf, das du einmal v1 und drei mal v2 hast. Weder v3 noch v4.
Verstehst du das Script überhaupt?
Schön wäre immer ein Beispielformular.

VG Merklin



mauersegler
Beiträge: 22
Registriert: 03.10.2013, 19:26

NaN Fehler vermeiden (durch leere Quellbereiche)

Beitrag von mauersegler » 09.10.2013, 17:39

Merklin hat geschrieben:Hallo,

es wäre schön wenn du uns dein Script mal genauer erläutern würdest.

Mir fällt nur auf, das du einmal v1 und drei mal v2 hast. Weder v3 noch v4.
Verstehst du das Script überhaupt?
Schön wäre immer ein Beispielformular.

VG Merklin

Erläutern? Du bist lustig :D
Das wäre schön...

Aber Du hast Recht. Sorry, ich hatte das etwas in Eile und schlampig hingeschrieben, eigentlich sollte es natürlich v1, v2, v3 usw. heißen.

Und auch der Screenshot hat noch gefehlt.

Trotzdem stimmt dieser Code sicher hinten und vorne nicht denke ich mal. Für mich ist es so als hätte ich über's Wochenende versucht chinesisch zu lernen.

Abgesehen davon bin ich etwas entnervt, weil:
  • * auf meinem Hauptrechner ist die Testversion von Acrobat XI abgelaufen
    * Die danach installierte Version 7.0 hat mir mehr zerschossen als genützt
    * Ich versuche seit Tagen eine neue Version auf meinem Macbook zu installieren, was trotz tiefgreifender Maßnahmen aufgrund irgendwelcher falschen Verzeichnisrechte nicht geht
    * eine laufende Testversion sitzt auf meinem ausrangierten Uraltrechner, den ich immer mühsam umstöpseln muss
Und zwischendurch versucht man halt etwas zu schlafen, die Familie zu sehen und arbeiten wäre auch nicht schlecht...

Aber ich will mich nicht beklagen denn Eure Arbeit hier finde ich mehr als bewundernswert.

So zurück zum Thema:
Also gerade stellte ich fest, dass beim Öffnen und Bearbeiten der Datei im Adobe Reader gar kein Problem auftritt, außer dem "NaN", aber keine Fehlermeldung o.ä., wie das im Acrobat der Fall ist.
An einer sauberen Lösung wäre ich trotzdem interessiert.

Kurz gesagt, ich muss es hinkriegen dass das Feld versteht, dass Zahlen verarbeitet werden sollen, und dass gleichzeitig nicht durch Null geteilt werden darf. Der Prozentwert soll ohne Dezimalen ausgegeben werden.

Angehängt ein Screenshot des Formularabschnitts.
Zur Erläuterung:
Die einzige Zeile die ich komplett verstehe ist diejenige wo er eigentliche Prozentwert gebildet wird, nämlich aus der Eingabe des Rabatts (RabEing) geteilt durch (die Gesamtkosten abzüglich der Nebenkosten) * 100.

Mit dem Code darüber war mein Gedanke, die Rechenprozedur nur dann zu starten, wenn überhaupt bei "Rabatt" etwas eingegeben ist, bzw. wenn die Nebenkosten oder Gesamtkosten nicht auf Null sind. Aber das geht natürlich am Problem vorbei, denn es muss ja ggf. auch in solchen Fällen gerechnet werden, wenn manche der Felder richtigerweise den Wert Null haben.

Sorry, es ist tatsächlich so dass ich die Problematik selbst noch nicht zu fassen kriege - ich tue mich extrem schwer mit sowas.
Ich weiß jedenfalls dass ich diese Prozentualrechnung durchführen will, die aber in manchen Fällen an einer Null (z.B. bei Eingabe des Rabatts oder bei Gesamtsumme) scheitert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

mauersegler
Beiträge: 22
Registriert: 03.10.2013, 19:26

NaN Fehler vermeiden (durch leere Quellbereiche)

Beitrag von mauersegler » 14.10.2013, 20:44

Ich konnte die Aufgabe nun wie folgt lösen:

Code: Alles auswählen

var ZwDig = parseFloat(getField("ZwDig").value);
var Zwsum = parseFloat(getField("Zwsum").value);
var Rabatt = parseFloat(getField("Rabatt").value);

ZwDig = isNaN(ZwDig) ? 0 : ZwDig;
Zwsum = isNaN(Zwsum) ? 0 : Zwsum;
Rabatt = isNaN(Rabatt) ? 0 : Rabatt;

if (ZwDig + Zwsum !== 0){
	event.value = Rabatt / (ZwDig + Zwsum) *100;
}
else {
	event.value = "";
}

Antworten