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}

введите описание изображения здесь

Связанный контент