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}

在此处输入图片描述

相关内容