Falsche Ergebnisse durch Runden

Die Möglichkeiten und Tücken von Formularen
Antworten
Gänsegeier
Beiträge: 4
Registriert: 14.12.2020, 20:01

Falsche Ergebnisse durch Runden

Beitrag von Gänsegeier » 14.12.2020, 20:08

Hallo allerseits,

ich habe in Acrobat Pro DC ein PDF-Formular erstellt, welches bei Summenfunktionen falsche Ergebnisse durch Runden enthält:

Wenn man mehr als 2 Stellen nach dem Komma eingibt, werden diese einzeln zunächst korrekt auf 2 Stellen nach dem Komma gerundet. Der Summenbetrag wird dann jedoch aus den zuvor eingegebenen Beträgen errechnet und nicht aus den gerundeten.

Beispiel: ich gebe 123,456 in ein Feld und 123,456 in ein 2. Feld ein. Beide werden einzeln auf 123,46 gerundet. Das Summenfeld zeigt aber 246,91 - was aber dann so nicht korrekt ist, da 2x 123,46 = 246,92 ist. Das summiert sich dann natürlich, je mehr Beträge zu einer Summe addiert werden müssen.

Kann mir da jemand helfen? Ich vermute, dass man dieses Problem nur mit JavaScript lösen kann, bin da aber Laie ...

Vielen Dank schonmal für die Infos!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

acronaut
Beiträge: 693
Registriert: 14.09.2006, 21:32
Kontaktdaten:

Re: Falsche Ergebnisse durch Runden

Beitrag von acronaut » 14.12.2020, 21:18

Hi,

ja, das ist zwar kein schwieriges, so aber doch ein Problem, das umständlicher zu lösen ist. als man denken möchte. Dafür musst Du ein "benutzerdef. Berechnungsscript" hinter dem Ergebnisfeld einrichten, das so ählich aussieht:

Code: Alles auswählen

var WertEingabefeld1 =  String(this.getField("NameEingabefeld1").value);
var ZahlenWertEingabefeld1  =  Number(WertEingabefeld1.replace (",", "."));
ZahlenWertEingabefeld1  = ZahlenWertEingabefeld1.toFixed(2);

var WertEingabefeld2 =  String(this.getField("NameEingabefeld2").value);
var ZahlenWertEingabefeld2  = Number(WertEingabefeld2.replace (",", "."));
ZahlenWertEingabefeld2  = ZahlenWertEingabefeld2.toFixed(2);


this.getField("NameErgebnisfeld").value = ZahlenWertEingabefeld1  + ZahlenWertEingabefeld2;
Kurze Erklärung:
  • Digitaltrennzeichen in der Programmierung ist immer der Punkt. Da wir in Europa aber üblicherweise ein Komma verwenden, muss die eingegebene Zahl erst einmal in einen String (textliche Information der Zeichenkette) umgewandelt werden, um dann das Komma mit einem Punkt auszutauschen.
  • Dann wird die textliche Info wieder in eine Zahl (Number) umgewandelt, und danach mit toFixed(2) auf "2" Nachkommastellen verkürzt. Dies ist nicht nur die Formatierung der Zahl zur Darstellung (wie das bei Dir bisher war), sondern der tatsächliche Wert der Zahl.
  • Danach kann dann wie gewünscht damit gerechnet werden, und das Ergebnis wieder dem Wert eines Feldes zugewiesen werden.
Viel Erfolg,
Andi

Gänsegeier
Beiträge: 4
Registriert: 14.12.2020, 20:01

Re: Falsche Ergebnisse durch Runden

Beitrag von Gänsegeier » 14.12.2020, 22:25

Hallo Andi,

vielen Dank für deine schnelle Antwort. Auch deine Erklärung ist für mich absolut schlüssig und logisch nachvollziehbar. Ich hab jetzt ein ganzes Weilchen rumexperimentiert - aber leider funktioniert es trotzdem nicht. Das Berechnungsskript habe ich eingegeben, dabei Eingabefeld1 und Eingabefeld2 durch die im Formular verwendeten Namen ersetzt, Rechtschreibung von allem nochmal geprüft etc. Aber leider rechnet er dann gar nicht. Es steht also im Ergebnis nachwievor 0,00 da.

Beste Grüße vom Geier alias André

acronaut
Beiträge: 693
Registriert: 14.09.2006, 21:32
Kontaktdaten:

Re: Falsche Ergebnisse durch Runden

Beitrag von acronaut » 16.12.2020, 09:59

Hi,

zwei Kommentare:

Ich habe bemerkt, dass bei dem Script das ich erst geschrieben habe, komischerweise nicht die nummern am Ende addiert werden, sondern die Strings. Also keine mathematische Addition, sondern eine textliche Aneinanderreihung. Scheinbar gibt "toFixed" einen String zurück.
Daher hier die geänderte letzte Zeile des Scripts:

Code: Alles auswählen

this.getField("NameErgebnisfeld").value = Number(ZahlenWertEingabefeld1)  + Number(ZahlenWertEingabefeld2);
Wenn das dann noch immer nicht klappt, schau mal was der JavaScript Debugger sagt ("Strg" + "J"). Evtl. hast Du irgendwo nen kleinen Schreibfehler drin. Wäre zumindest der Klassiker.

Hier anbei die Datei so wie es funktionieren sollte:
Addition von Feldwerten.pdf
Schöne Grüße,
Andi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten