Antworten auf deine Fragen:
Neues Thema erstellen

Acrobat Berechnung in Formular

Anderl1006

Noch nicht viel geschrieben

Hallo zusammen,

bisher habe ich mich mit Adobe Acrobat DC auf das einfache erstellen und bearbeiten von pdf Dateien konzentriert.
Für ein privates Projekt bin ich nun zum ersten mal mit dem Thema Berrechnungen/JS aneinander geraten.

Ich habe also zwei Formularfelder erstellt die das Ergebnis einer Berechnung aus je zwei anderen Formularfeldern wiedergeben.
Diese beiden Felder werden ebenfalls durch eine Berechnung erstellt. Das ist jeweils eine simple Addition die über den Reiter Berechung gelöst ist. In der Praxis sieht das also so aus:

Im Formularfeld GGW: Wert 1 + Wert 2 = Wert "GGW"
Im Formularfeld GBrGW: Wert 1 + Wert 2 = Wert "GBrGW"

Bis dahin funktioniert das natürlich problemlos. Jetzt habe ich ein weiteres Feld "BRH" erstellt und dieses Feld soll die folgende Berechnung abbilden: GBrGW*100/GGW.
Gelöst habe ich das über die Funktion "Vereinfachte Feldbezeichnung" und habe den Rechenweg auch genau so dort eingetragen. Auch diese Formel funktioniert grundsätzlich.

Allerdings bekomme ich eine Fehlermeldung wenn ich das Format des Feldes BRH auf Zahlen stelle, die ich aber brauche weil ich keine Dezimalstellen abbilden möchte, nämlich die folgende:
"Der eingegebene Wert stimmt nicht mit dem Format des Feldes überein. [ BRH ]".
Das hat wohl damit zu tun das die Division einen Fehler verursacht solange der Wert /0 dividiert werden soll weil durch die ersten beiden Additionen noch kein Wert vorhanden ist.
Desweiteren suche ich noch einen Weg das das Ergebnis in BRH immer nach unten abgerundet wird, auch daran bin ich bisher kläglich gescheiert.

Ich habe leider überhaupt keine Ahnung von JavaScript, für jemanden der sich damit auskennt wahrscheinlich ein Klacks und vielleicht findet sich hier ja jemand der mir sagen kann wie ich mir da am besten helfe.

Viele Grüße und einen schönen Sonntag.
Andi
 

Design & Layout

buerzel

Versuch macht kluch!

Teammitglied
Versuch's mal (ohne auf Zahlen zu formatieren) mit parseFloat(x):

parseFloat ( x )​


Parst einen String x und gibt die erste Fliesskommazahl – also die erste Zahl mit einem Dezimalpunkt – zurück. Ist das erste Zeichen im String keine Ziffer, Weißraum oder ein führendes Minuszeichen, gibt parseFloat() NaN zurück.

parseFloat( "15.87" ) // gibt 15,87 zurück
parseFloat( "-17,8 Meter" ) // gibt -17 zurück
parseFloat( "foo " ) // gibt NaN zurück

parseFloat()
wandelt z.B. Eingaben in Formularfeldern in Zahlen um. Javascript interpretiert die Werte von Formularfeldern immer als String, auch wenn der Benutzer '17.87' in ein Feld eingetragen hat. Bei der Transformation von Fliesskommazahlen aus Formularfeldern müssen Kommas vor dem Aufruf von parseInt() in Punkte umgewandelt werden, da parseInt() ansonsten nur die Zahl bis zum Komma umwandelt.

x = x.replace( /,/,"." );
y.value = parseFloat( x );
(Quelle: https://www.mediaevent.de/javascript/string-zu-zahl.html)
 
Zuletzt bearbeitet:

Anderl1006

Noch nicht viel geschrieben

Ich hab das versucht, aber es ändert leider nix.
Es bleibt ohne Formatierung NaN stehen, das Problem dabei ist das er dann nach der Berechnung unzählig viele Stellen nach dem Komma ausspuckt, ich benötige aber nur die Zahlen vor dem Komma, bzw dürfen da keine weiteren Zahlen drin stehen. Der Fehler ist dann natürlich weg, aber eben das Problem mit den Dezimalstellen wieder da, und er rundet über 0,5 auf, das muss ich auch noch irgendwie angehen...
 

draupnir

Moderator

Teammitglied
"NaN" = not a number (es ist keine Zahl). Etwas Programmierzauber braucht es da schon, um das zu vermeiden. Auch kann/sollte man Preise auf 2 Stellen nach dem Komma (auf-)runden. Und dann ist noch die Frage: Punkt oder Komma. Auch wenn wir im Deutschen das Komma verwenden, wollen manche Programme den Punkt als Trenner zwischen ganzer Zahl und dem Rest.
 

Anderl1006

Noch nicht viel geschrieben

In dem Formular geht es um die Berechnung von Bremsgewichten bei Zügen, da gibt es keine Stellen nach dem Komma, und alles was keine volle Stelle ist muss laut Betriebsregelwerk abgerundet werden da man dem Zug so ein schlechteres Bremsvermögen unterstellt als er es tatsächlich hat, man bewegt sich also zur sicheren Seite hin in dem man Reserven schafft.
Nach der Berechnung werden diese BRH, also Bremshundertstel, dem Zugsicherungsrechner zur Verfügung gestellt und mit, unter anderem, diesen Werten berechnet dieser dann Bremswege, Bremseinsatzpunkte usw.... um auf diese Bremshundertstel zu kommen gibt es eine Formel die lautet:
Bremsgewicht in ganzen Tonnen x100 /Gesamtgewicht in ganzen Tonnen.
Wenn da dann ein Wert XX,9 oder XXX,9 heraus kommt rundet man diesen ab, würde man ihn aufrunden gäbe man dem Zug betriebsgefährdend falsche Werte.

An und für sich ist das relativ einfach, aber da scheitert es bei mir einfach an den Programmierkenntnissen, das nur mal zum Hintergrund und vielleicht besseren Verständnis was ich damit vorhabe.

Viele Grüße
 

Anderl1006

Noch nicht viel geschrieben

Hattest du dein Ergebnis auch in Anführungszeichen gesetzt? Im Beispiel aus dem Zitat steht die Zahl in Anführungszeichen - analog muss bei dir also stehen: parseFloat( "dein Ergebnis" )
Ja, dann geht das, aber meine Werte sind ja grundsätzlich variabel, mit nem Steuersatz z.b. ginge das da der ja unverändert als Fixwert steht, aber bei meinem Fall sind sämtliche Werte aus Variablen errechnete Variablen...
 

buerzel

Versuch macht kluch!

Teammitglied
Wie es noch gehen sollte:

String(GBrGW*100/GGW).split('.')

wenn das Trennzeichen der Punkt ist - sonst ein Komma zwischen den Anführungszeichen.
 

Anderl1006

Noch nicht viel geschrieben

ALso ich hab das jetzt mal in allen erdenklichen Variationen versucht, aber weder String(GBrGW*100/GGW).split('.') noch parseFloat haben irgendeine Wirkung oder Auswirkung ausser das im Zweifel die Berechnung nichtmehr funktioniert und einfach garkein Wert mehr ausgegeben wird.

Ich bin langsam echt am verzweifeln...
 

helge07

Aktives Mitglied

Zur Rundung nach unten gibt es die JavaScript-Funktion Math.floor().
Hier habe ich Deine Rechnung in einem Testformular ausprobiert incl. Verhindern der Division duch 0.
https://www.dropbox.com/s/dlu40e0pq7hy06e/floor_Test.pdf?dl=0
(Achtung: Das Formular funktioniert nicht im Browser, man muss es downloaden)

Der zugehörige Code steht im Berechnungsskript der beiden Felder GGW und GBrGW:
-------------------------------------------------
var GGW = this.getField("GGW");
var GBrGW = this.getField("GBrGW");
var BRH = this.getField("BRH");

if (GGW.value!=0 )
BRH.value = Math.floor((GBrGW.value * 100 )/ GGW.value);
else
BRH.value="Division durch 0 nicht erlaubt" ;
--------------------------------------------------
 

buerzel

Versuch macht kluch!

Teammitglied
Hab mich ein bisschen in Formulare eingefummelt:

acrobat-js1qdey1.jpg


(wie ich gestern auf parseFloat kam, ist mir immer noch ein Rätsel ...)

PS: parseInt(x) gibt auch nur den Ganzzahlanteil ohne Aufrunden aus.
 
Zuletzt bearbeitet:

Anderl1006

Noch nicht viel geschrieben

Zur Rundung nach unten gibt es die JavaScript-Funktion Math.floor().
Hier habe ich Deine Rechnung in einem Testformular ausprobiert incl. Verhindern der Division duch 0.
https://www.dropbox.com/s/dlu40e0pq7hy06e/floor_Test.pdf?dl=0
(Achtung: Das Formular funktioniert nicht im Browser, man muss es downloaden)

Der zugehörige Code steht im Berechnungsskript der beiden Felder GGW und GBrGW:
-------------------------------------------------
var GGW = this.getField("GGW");
var GBrGW = this.getField("GBrGW");
var BRH = this.getField("BRH");

if (GGW.value!=0 )
BRH.value = Math.floor((GBrGW.value * 100 )/ GGW.value);
else
BRH.value="Division durch 0 nicht erlaubt" ;
--------------------------------------------------
Das ist sehr cool, und funktioniert soweit einwandfrei, vielen vielen Dank.
Die beiden Werte aus GGW und GBrGW sind ebenfalls erechnete Werte die ich vorher über die Berechnungsfunktion "Wert ist die Summe (+)" jeweils im Formular GGW und GBrGW berechnen lies, diese Möglichkeit fällt jetzt weg, da ich ja das benutzerdef. Berechnungsskript nutze. Läßt sich das da noch irgendwie einbauen?
Das wäre für die eine Summe "WzGew+TfzGew=GGW" und für die zweite Summe"WzBrGew+TfzBrGew=GbrGW".

Viele Grüße und vielen Dank nochmal
Andi
 

Anderl1006

Noch nicht viel geschrieben

Das Muster ist immer dasselbe:

// Feldinhalt an eine Variable übergeben
var [Variablenname] = this.getField("Feldname") ;

und rechnen mit [Variablenname].value.
Das habe ich jetzt tatsächlich selbst hinbekommen, vielen Dank für die Hilfe :)

Jetzt funktioniert das mit dem addieren und auch die Berechnung, aber das mit dem Abrunden nimmt komische Züge an, ich rechne also der einfacheit halber exemplarisch:
950+50 = 1000 <-GGW
950+50 = 1000<- GBrGW
Multipliziere ich jetzt 1000 mit 100 und dividiere das wieder durch 1000 ist das Ergebnis 100
Die Berechnung aber sagt mir 95...
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.481
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben