siunitx:如果數字四捨五入為零,如何刪除減號?

siunitx:如果數字四捨五入為零,如何刪除減號?

我想在表中使用原始數據,並讓 siunitx 套件進行舍入,以便我可以根據未來的需求輕鬆調整表的顯示精度。問題在於,在多種情況下,-0.00001 或類似的值將四捨五入為 -0.0。儘管我知道在某些領域,顯示數字從哪個方向接近零可能是一種很好的做法,但這在我的領域中相當罕見,我希望所有四捨五入到-0.0 的數字都顯示為0.0 而不帶負號。

有一個特定的選項可以做到這一點嗎?我在 siunitx 文檔中找不到任何內容。

\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}

答案1

確實siunitx保留了原始數字的符號。作為替代方案,您可以使用 進行舍入pgfplots,這會刪除輸出的符號fixed(它將符號保留在科學輸出中)。

這可以與collcell套件結合來定義類似於S列類型的單元格操作siunitx(請參閱如何在每個表列上執行命令)。在下面的 MWE 中,執行附加檢查以查看儲存格值是否為數字(來自套件xstring),以允許表標題。最後,標題使用一列多列居中。

編輯:請注意,多列(類型c)和數字檢查都阻止\pgfmathprintnumber被調用,只有其中之一足以用於標題行。

微量元素:

\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}

結果:

在此輸入影像描述

答案2

您可以使用 \fpeval 對數字進行舍入,然後使用 siunitx 對其進行格式化:

\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}

在此輸入影像描述

相關內容