siunitx: Wie entferne ich das Minuszeichen, wenn eine Zahl auf Null gerundet wird?

siunitx: Wie entferne ich das Minuszeichen, wenn eine Zahl auf Null gerundet wird?

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 siunitxdas Vorzeichen der ursprünglichen Zahl bei. Alternativ können Sie mit runden pgfplots, wodurch das Vorzeichen für fixeddie Ausgabe entfernt wird (bei wissenschaftlichen Ausgaben bleibt das Vorzeichen erhalten).

Dies kann mit dem collcellPaket kombiniert werden, um eine Zelloperation ähnlich dem SSpaltentyp 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 \pgfmathprintnumbereinen 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:

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen