Discussion:
Rechnen mit fp - unerklärliches Rechenergebnis
(zu alt für eine Antwort)
Alfred Neumann
2021-12-07 10:08:08 UTC
Permalink
Moin zusammen,

ich versuche, in einer Tabelle mit fp Berechnungen durchzuführen.
Es werden Teilstrecken-km eingegeben, daraus sollen die Tages-km und der
jeweilige Gesamtstand ermitteln werden.

Für die Zwischensumme klappt das ganz gut, leider zeigt die
Gesamtstrecke für mich unerklärliche Werte. Orientiert habe ich mich am
Beispiel in:
<http://tex.stackexchange.com/questions/9567/name-scoping-issue-probably>

Vielleicht kann mir jemand auf die Sprünge helfen.
Danke.

Hier mein Minimalbeispiel:
%------------------------------------
\documentclass{article}
\usepackage[autolanguage]{numprint}
\usepackage[debug]{fp}
\usepackage{booktabs}

\FPset\total{0} % für Gesamtstand
\FPset\zwisum{0} % für Zwischenstand
%
\newcommand{\etappe}[1]{%
\FPeval\total{round(#1:0)}
\FPprint{#1} mi
% aufsummieren, global verfügbar machen nach
%
http://tex.stackexchange.com/questions/9567/name-scoping-issue-probably
\FPadd\zwisum\zwisum{#1}\global\let\zwisum\zwisum
\FPadd\total\total{#1}\global\let\total\total
}
%
\newcommand{\teilsumme}{%
\FPeval\zwisum{round(zwisum:0)}
\FPprint\zwisum{} mi%
% teilsumme nach Aufruf auf Null zurücksetzen
\FPset\zwisum{0}\global\let\zwisum\zwisum
}
%
\newcommand{\gesamt}{%
\FPeval\total{round(total:0)}
\FPprint\total{} mi%
}
%
\begin{document}
\begin{tabular}{@{}crrr@{}}
Ort & Teilstrecke & Zwischensumme & Gesamtstrecke \\\toprule
A & \etappe{5} & & \\
& & \teilsumme & \gesamt \\\midrule
B & \etappe{6} & & \\
C & \etappe{7} & & \\
& & \teilsumme & \gesamt \\\midrule
D & \etappe{8} & & \\
E & \etappe{9} & & \\
F & \etappe{10} & & \\
& & \teilsumme & \gesamt \\\bottomrule
\end{tabular}

\bigskip
%--- Ermitteln der Gesamtstrecke in km --------------------------
%--- Tabellenergebnis außerhalb der Tabelle verwenden
\FPset\geskm{0} % geskm definieren
{\Large Gesamtstrecke:
\FPmul{\geskm}{\total}{1.609} % Umrechung mi -> km
\FPtrunc\geskm\geskm{0} % keine Nachkommastellen
\FPprint\gesamt{} = \FPprint\geskm{} km
}

\end{document}
Tobias Dussa
2021-12-07 10:32:02 UTC
Permalink
Moinsen,
Post by Alfred Neumann
\newcommand{\etappe}[1]{%
\FPeval\total{round(#1:0)}
\FPprint{#1} mi
% aufsummieren, global verfügbar machen nach
% http://tex.stackexchange.com/questions/9567/name-scoping-issue-probably
\FPadd\zwisum\zwisum{#1}\global\let\zwisum\zwisum
\FPadd\total\total{#1}\global\let\total\total
}
Ohne mich jetzt allzu tief da reingearbeitet zu haben, würde ich auf den
ersten Blick sagen:
Ein Aufruf von \etappe setzt \total auf #1 und addiert dann nochmal #1
dazu, also ist nach jedem Aufruf von \etappe der Gesamtzähler zweimal
der aktuelle Wert. Ich glaube, das \FPeval am Anfang des Makros willst
du da nicht haben.

Cheers,
Toby.
--
Pi is equal to 3 for sufficiently large values of 3, or sufficiently
small values of Pi.
Alfred Neumann
2021-12-09 16:20:36 UTC
Permalink
Gruss aus dem Süden,
wär das nicht etwas für LUA?
Ich habe zwar gelesen, dass Rechnen eine Sache für LUA wäre. Für mich
ist aber ziemliches Neuland. Mal sehen, vielleicht riskiere ich doch mal
einen Blick.

Alfred
Post by Tobias Dussa
Post by Alfred Neumann
\newcommand{\etappe}[1]{%
      \FPeval\total{round(#1:0)}
      \FPprint{#1} mi
      % aufsummieren, global verfügbar machen nach
      %
http://tex.stackexchange.com/questions/9567/name-scoping-issue-probably
      \FPadd\zwisum\zwisum{#1}\global\let\zwisum\zwisum
      \FPadd\total\total{#1}\global\let\total\total
}
Ohne mich jetzt allzu tief da reingearbeitet zu haben, würde ich auf
Ein Aufruf von \etappe setzt \total auf #1 und addiert dann nochmal
#1 dazu, also ist nach jedem Aufruf von \etappe der Gesamtzähler
zweimal der aktuelle Wert.  Ich glaube, das \FPeval am Anfang des
Makros willst du da nicht haben.
Danke, das war's!
Lesen Sie weiter auf narkive:
Loading...