summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/siunitx/siunitx-number.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/siunitx/siunitx-number.dtx')
-rw-r--r--macros/latex/contrib/siunitx/siunitx-number.dtx41
1 files changed, 37 insertions, 4 deletions
diff --git a/macros/latex/contrib/siunitx/siunitx-number.dtx b/macros/latex/contrib/siunitx/siunitx-number.dtx
index ff97058d20..e1cb9e639d 100644
--- a/macros/latex/contrib/siunitx/siunitx-number.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-number.dtx
@@ -3061,6 +3061,9 @@
% \begin{macro}[EXP]{\@@_round_uncertainty:nnnnnnn}
% \begin{macro}[EXP]{\@@_round_uncertainty_end:nn}
% \begin{macro}[EXP]{\@@_round_uncertainty:nnn}
+% \begin{macro}[EXP]{\@@_round_uncertainty_check:nnnw}
+% \begin{macro}[EXP]{\@@_round_uncertainty_check:Nnnnw}
+% \begin{macro}[EXP]{\@@_round_uncertainty_aux:nnn}
% \begin{macro}[EXP]{\@@_round_uncertainty:nnnn}
% \begin{macro}[EXP]{\@@_round_uncertainty:nnnnn}
% \begin{macro}[EXP]
@@ -3108,11 +3111,35 @@
\cs_new:Npn \@@_round_uncertainty_end:nn #1#2
{ \exp_not:n { {#1} {#2} } }
% \end{macrocode}
+% Before doing any rounding, we need to be sure that the main value has
+% enough significant digits. If not, the result is zero.
+% \begin{macrocode}
+\cs_new:Npn \__siunitx_number_round_uncertainty:nnn #1#2#3
+ {
+ \@@_round_uncertainty_check:nnnw {#1} {#2} {#3}
+ #1#2 \q_recursion_tail \q_recursion_stop
+ }
+\cs_new:Npn \@@_round_uncertainty_check:nnnw #1#2#3#4
+ {
+ \quark_if_recursion_tail_stop_do:Nn #4 { { 0 } { } { } }
+ \int_compare:nNnTF {#4} = 0
+ { \@@_round_uncertainty_check:nnnw }
+ { \@@_round_uncertainty_check:Nnnnw #4 }
+ {#1} {#2} {#3}
+ }
+\cs_new:Npn \@@_round_uncertainty_check:Nnnnw #1#2#3#4#5
+ \q_recursion_tail \q_recursion_stop
+ {
+ \int_compare:nNnTF { \tl_count:n {#1#5} } < { \tl_count:n {#4} }
+ { { 0 } { } { } }
+ { \@@_round_uncertainty_aux:nnn {#2} {#3} {#4} }
+ }
+% \end{macrocode}
% Round the uncertainty first: this is needed to get the number of places
% correct. Once that is done, it's just a question of working out the digits
% in the main part.
% \begin{macrocode}
-\cs_new:Npn \@@_round_uncertainty:nnn #1#2#3
+\cs_new:Npn \@@_round_uncertainty_aux:nnn #1#2#3
{
\exp_args:Nf \@@_round_uncertainty:nnnn
{
@@ -3123,9 +3150,12 @@
}
\cs_new:Npn \@@_round_uncertainty:nnnn #1#2#3#4
{
- \exp_last_unbraced:Nf \@@_round_uncertainty:nnnnn
- { \@@_round:nnn {#1} { } {#4} }
- {#2} {#3} {#1}
+ \use:e
+ {
+ \exp_not:N \@@_round_uncertainty:nnnnn
+ \@@_round:nnn {#1} { } {#4}
+ {#2} {#3} {#1}
+ }
}
% \end{macrocode}
% Here, we need to work out how many digits to zero-fill the uncertainty, for
@@ -3276,6 +3306,9 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_zero_decimal:NN}
% \begin{macro}[EXP]{\@@_zero_decimal:nnnnnnn}