
我想在表中使用原始數據,並讓 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}