
Ich möchte meine Rohdaten in meinen Tabellen verwenden und das Runden dem siunitx-Paket überlassen, damit ich die angezeigte Genauigkeit meiner Tabellen je nach meinen zukünftigen Anforderungen problemlos anpassen kann. Das Problem besteht darin, dass in mehreren Fällen eine -0,00001 oder etwas Ähnliches auf -0,0 gerundet wird. Obwohl ich verstehe, dass es in einigen Bereichen eine gute Praxis sein kann, anzuzeigen, aus welcher Richtung sich die Zahlen Null nähern, ist dies in meinem Bereich ziemlich unüblich und ich möchte, dass alle Zahlen, die auf -0,0 gerundet werden, als 0,0 ohne Minuszeichen angezeigt werden.
Gibt es dafür eine spezielle Option? Ich konnte in der siunitx-Dokumentation nichts dazu finden.
\documentclass{article}
\usepackage{siunitx}
\usepackage{booktabs, tabularx}
\begin{document}
\sisetup{round-mode=places}
\centering
\begin{tabular}{
*2{S[round-precision=1]}
}\toprule
{A} & {B}\\\midrule
-0.0000001 & 2.5823\\
-2.5823 & 0.0000001\\\bottomrule
\end{tabular}
\end{document}
Antwort1
Behält tatsächlich siunitx
das Vorzeichen der ursprünglichen Zahl bei. Alternativ können Sie mit runden pgfplots
, wodurch das Vorzeichen für fixed
die Ausgabe entfernt wird (bei wissenschaftlichen Ausgaben bleibt das Vorzeichen erhalten).
Dies kann mit dem collcell
Paket kombiniert werden, um eine Zelloperation ähnlich dem S
Spaltentyp aus zu definieren siunitx
(sieheSo führen Sie den Befehl für jede Tabellenspalte aus). Im MWE unten wird zusätzlich geprüft, ob der Zellenwert numerisch ist (aus dem Paket xstring
), um Tabellenüberschriften zu ermöglichen. Abschließend werden die Überschriften mithilfe einer einspaltigen Mehrspalte zentriert.
Bearbeiten:Beachten Sie, dass sowohl die Mehrspaltigkeitsprüfung (vom Typ c
) als auch die numerische Prüfung \pgfmathprintnumber
einen Aufruf verhindern, da für Kopfzeilen nur eine davon ausreichen würde.
MWE:
\documentclass{article}
\usepackage{collcell}
\usepackage{pgfplots}
\usepackage{xstring}
\newcommand{\roundsign}[1]{\IfDecimal{#1}{\pgfmathprintnumber[fixed,fixed zerofill,precision=1]{#1}}{#1}}
\newcolumntype{S}{>{\collectcell\roundsign}{r}<{\endcollectcell}}
\begin{document}
\begin{tabular}{S S}
\multicolumn{1}{c}{A} & \multicolumn{1}{c}{B}\\
\hline
-0.0000001 & 2.5823\\
\hline
-2.5823 & 0.0000001\\
\hline
\end{tabular}
\end{document}
Ergebnis:
Antwort2
Sie können \fpeval verwenden, um die Zahlen zu runden und sie dann mit siunitx zu formatieren:
\documentclass{article}
\usepackage{siunitx,xfp}
\usepackage{booktabs, tabularx}
\begin{document}
\sisetup{round-mode=places,round-integer-to-decimal}
\centering
\begin{tabular}{
*2{S[round-precision=1]}
}\toprule
{A} & {B}\\\midrule
\fpeval{round(-0.0000001,1)} & \fpeval{round(2.5823,1)}\\
\fpeval{round(-2.5823,1)} & \fpeval{round(0.0000001,1)}\\\bottomrule
\end{tabular}
\end{document}