Rundung bei Multiplikation zweier Formularfelder

Die Möglichkeiten und Tücken von Formularen
adam2508
Beiträge: 24
Registriert: 29.03.2012, 20:39

Rundung bei Multiplikation zweier Formularfelder

Beitrag von adam2508 » 29.03.2012, 20:57

Hallo zusammen,

ich bin neu hier und habe ein ziemlich simples Problem und leider keine Lösung, da ich mich mit JS nicht gut auskennen.

Problem:
1. Ich multipliziere 2 Formularfelder (a und b) mittels vereinfachter Feldbezeichnung und werfe das Ergebnis in einem neuen dritten Formularfeld (c) aus.

2. Dieses neue Formularfeld (c) wird wiederrum mit einem anderen Formularfeld multipliziert (d) und das Ergebnis in einem neuen Feld (e) ausgegeben.

3. Alle Felder sind formatiert als "Zahl" mit "2 Dezimalstellen"

4. Es kommt nun vor, dass bei der Multiplikation von (a) und (b) ein Wert (c) rauskommt, der mehr als 2 Nachkommestellen hat, wobei nur die beiden ersten Nachkommastellen kaufmännisch gerundet dargestellt werden.

Beispiel:

(a) 0,06 x (b) 1234,75 = (c) 74,085 angezeigt als 74,09, was korrekt ist

5. Multipliziere ich jetzt (c) mit einem weiteren Wert (d), rechnet Acrobat nicht mit dem angezeigten Wert mit 2 Nachkommastellen, sondern mit dem Wert mit 3 Nachkommastellen, so dass augenscheinlich ein falsches Ergebnis herauskommt.

Beispiel:

(c) 74,09 x (d) 12 = (e) 889,02, was augenscheinlich falsch ist, da die Lösung 889,09 heissen müsste. Rechnerisch ist es doch richtig, da er im Hintergrund 74,085 x 12 rechnet.

Ich hoffe, ich konnte mein Problem rüberbringen.

Hat jemand einen Rat, wie ich sicherstellen kann, dass er bei Formularfeldern nur mit dem angezeigten Wert eines Feld rechnet und nicht im Hintergrund mitgeführte Nachkommastellen berücksichtigt?!?

Vielen Dank im Voraus und Grüße

Andreas
 

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Rundung bei Multiplikation zweier Formularfelder

Beitrag von armine » 30.03.2012, 17:07

Hallo Andreas,

JavaScript bietet dir Math.round an. Das beschäftigt sich aber nur mir Ganzzahlen und bietet dir somit keine Dezimalstellen. Der Workaround ist:

this.rawValue = Math.round(a.rawValue * b.rawValue * 100) / 100

oder

var Nachkommastellen = 2 ;
this.rawValue = Math.round(a.rawValue * b.rawValue * Math.pow(10,Nachkommastellen)) / Math.pow( 10, Nachkommastellen)

Problem gelöst?
armine

adam2508
Beiträge: 24
Registriert: 29.03.2012, 20:39

Rundung bei Multiplikation zweier Formularfelder

Beitrag von adam2508 » 31.03.2012, 11:49

Hallo Armine,

danke für Deine Hilfe. Da ich ein totaler Newbie in Sachen JS bin, eine Frage:

Wo kommt der Code hin? Bei den Berechnungen ?

Gruß

Andreas


armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Rundung bei Multiplikation zweier Formularfelder

Beitrag von armine » 31.03.2012, 23:06

Hallo Andreas,

Acrobat ist nun so ganz und gar nicht mein Ding. Vielleicht kann sich ein Acrobat-Kundiger deines Problems annehmen.

Die Eingabefelder sind [fontsize=3]a[/fontsize] und [fontsize=3]b[/fontsize], das Ausgabefeld [fontsize=3]ab[/fontsize]. Der Code in der JavaScript-Konsole ist:

this.getField("ab").value = Math.round(this.getField("a").value * this.getField("b").value * 100 + 0.00001) / 100

Dort funktioniert er auch, was das Ergebnis angeht – aber nach der Fehlermeldung:
a is not defined
1:AcroForm:ab_gerundet:CalculateAusnahmefehler in Zeile 1 der Funktion oberste_Ebene, Skript AcroForm:ab_gerundet:Calculate

2,25 * 3,26 = 7,335, aber nicht in JavaScript. Da kommt 7,334999999 heraus und so wird dann auch zu 7,33 gerundet. Um das zu kompensieren habe ich die Addition von 0.00001 eingefügt (Je 2 Dezimalstellen bei Multiplikand und Multiplikator führt zu max. 4 Dezimalstellen beim Produkt. Da wird die Addition in der 5. Dezimalstelle keinen Schaden anrichten.).

Hoffentlich kommst du nun zurecht.
armine



adam2508
Beiträge: 24
Registriert: 29.03.2012, 20:39

Rundung bei Multiplikation zweier Formularfelder

Beitrag von adam2508 » 01.04.2012, 09:08

Hallo Armine,

vielen Dank für die Hilfe, ich bin weitergekommen und habe im Acrobat die Möglichkeit gefunden, das Format eines Feldes mit JS zu bestimmen.

Allerdings habe ich noch zwei Probleme:

a) Er zeigt mir aktuell 3 Nachkommastellen an und rechnet auch mit Ihnen

b) Statt einem Komma erfolgt die Trennung der Dezimalstellen amerikanisch mit einem "."

Kannst Du mir auch da weiterhelfen?

Vielen Dank im Voraus und viele Grüße!

Andreas


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

Rundung bei Multiplikation zweier Formularfelder

Beitrag von Merklin » 01.04.2012, 11:31

Hallo Andreas,

wie lautet den dein Script?

VG Merklin

adam2508
Beiträge: 24
Registriert: 29.03.2012, 20:39

Rundung bei Multiplikation zweier Formularfelder

Beitrag von adam2508 » 01.04.2012, 11:35

wie oben beschrieben, habe ich

this.rawValue = Math.round(a.rawValue * b.rawValue * 100) / 100

bzw.

var Nachkommastellen = 2 ;
this.rawValue = Math.round(a.rawValue * b.rawValue * Math.pow(10,Nachkommastellen)) / Math.pow( 10, Nachkommastellen)

benutzt und zwar bei der Feldformatierung.



Gruß

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

Rundung bei Multiplikation zweier Formularfelder

Beitrag von Merklin » 01.04.2012, 11:57

Hallo Andreas,

verwendest du den LiveCycle Designer?

Ansonsten funktioniert dein Script nicht.

VG Merklin


adam2508
Beiträge: 24
Registriert: 29.03.2012, 20:39

Rundung bei Multiplikation zweier Formularfelder

Beitrag von adam2508 » 01.04.2012, 12:02

Hallo Merklin,

ne Acrobat 9 prof. !

Gruß

adam2508
Beiträge: 24
Registriert: 29.03.2012, 20:39

Rundung bei Multiplikation zweier Formularfelder

Beitrag von adam2508 » 02.04.2012, 17:37

Gibt es da nicht einfach ein Formatierungsskript a la "Runde auf 3 Nachkommastellen" und Ende?!?

Antworten