Я хочу использовать свои необработанные данные в своих таблицах и позволить пакету 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}