\ifnum vs. Dezimalzahlen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: \ifnum vs. Dezimalzahlen

von Epllus » So 17. Mär 2013, 15:08

rais hat geschrieben:Eine Länge wird intern als Integer in `scaled point' (65536 sp = 1 pt) behandelt, deshalb ist das Ergebnis hier zufällig richtig:
3.34 pt * 65536 sp/pt -> 218890 sp
und 218890 ist nicht kleiner als 1 -- also ja, Du müsstest eigentlich zwei Längen miteinander vergleichen, dafür gibt es \ifdim.
Danke für die Erklärung, jetzt weiß ich, wieso manchmal wenn ich eine Länge definierte und mittels \ifnum verglich etwas falsches rauskam.
Verwende jetzt stattdessen \ifdim und es funktioniert :)
\documentclass{scrartcl}
\begin{document}
\ifdim 3.223423pt<4pt True \else Falsch \fi
% Oder mit eigener Länge:
\newlength{\mylength}
\setlength{\mylength}{3.245pt}
\ifdim \mylength<4pt True \else Falsch \fi
\end{document}
rais hat geschrieben:Wie hättest Du plattformübergreifend gleiche Resultate garantiert?
Vermutlich gar nicht (vielleicht gegen Geld ;)).
Wenn du Dezimalzahlen vergleichen willst, nimm z.B. das l3fp-Paket.
Habe mir das Paket angeschaut und es funktioniert ziemlich gut, allerdings würde ich dann (mal wieder) LaTeX-Code und LaTeX3-Code vermischen.
Ich werde das Paket verwenden, wenn ich irgendwann vielleicht möglicherweise mein Paket auf LaTeX3-Code anpassen werde, bis dahin verwende ich \ifdim.

Grüße
Epllus

von u_fischer » So 17. Mär 2013, 11:12

Wenn du Dezimalzahlen vergleichen willst, nimm z.B. das l3fp-Paket.

Re: \ifnum vs. Dezimalzahlen

von rais » So 17. Mär 2013, 09:39

Hallo,
Epllus hat geschrieben:Während dem Schreiben meines Paketes ist mir immer eine Sache aufgefallen, die ich mir nie erklären konnte: \ifnum mag keine Dezimalzahlen, außer, sie kommen in Längen vor.
AFAIK kannst Du nur Integerwerte mit \ifnum vergleichen.
Epllus hat geschrieben: Es sei denn, ich definiere eine Länge (muss ich eigentlich nun auch eine Vergleichslänge definieren?):
\documentclass{scrartcl} 
\begin{document}
\newlength{\mylength}
\setlength{\mylength}{3.34pt}
\ifnum \mylength<1 Funktioniert mit Längen \else Aber nur mit Längen \fi
\end{document}
Eine Länge wird intern als Integer in `scaled point' (65536 sp = 1 pt) behandelt, deshalb ist das Ergebnis hier zufällig richtig:
3.34 pt * 65536 sp/pt -> 218890 sp
und 218890 ist nicht kleiner als 1 -- also ja, Du müsstest eigentlich zwei Längen miteinander vergleichen, dafür gibt es \ifdim.;)
Epllus hat geschrieben: Nun meine Frage: Gibt es einen tieferen Grund dafür, dass ich Dezimalzahlen nur in Längen vergleichen kann?
Und wenn ja, welcher wäre das?
Wie hättest Du plattformübergreifend gleiche Resultate garantiert?

MfG
Rainer

\ifnum vs. Dezimalzahlen

von Epllus » Sa 16. Mär 2013, 17:37

Während dem Schreiben meines Paketes ist mir immer eine Sache aufgefallen, die ich mir nie erklären konnte: \ifnum mag keine Dezimalzahlen, außer, sie kommen in Längen vor.

Ich kann mühelos ganze Zahlen vergleichen:
\documentclass{scrartcl} 
\begin{document}
\ifnum3<4 Funktioniert mit ganzen Zahlen \else Aber nicht mir Dezimal\fi
\end{document}
Aber ich kann keine Dezimalzahlen vergleichen:
\documentclass{scrartcl} 
\begin{document}
\ifnum3.34<1 Geht nicht \else geht nicht\fi
\end{document}
Es sei denn, ich definiere eine Länge (muss ich eigentlich nun auch eine Vergleichslänge definieren?):
\documentclass{scrartcl} 
\begin{document}
\newlength{\mylength}
\setlength{\mylength}{3.34pt}
\ifnum \mylength<1 Funktioniert mit Längen \else Aber nur mit Längen \fi
\end{document}
Nun meine Frage: Gibt es einen tieferen Grund dafür, dass ich Dezimalzahlen nur in Längen vergleichen kann?
Und wenn ja, welcher wäre das?

Grüße
Epllus

Nach oben