From 8ca2c0f2f725360c1d1c530fc5a918bb593da82a Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Mon, 8 Aug 2022 21:00:04 +0000
Subject: siunitx (8aug22)

git-svn-id: svn://tug.org/texlive/trunk@64080 c570f23f-e606-0410-a88d-b1316a301751
---
 .../source/latex/siunitx/siunitx-number.dtx        | 41 +++++++++++++++++++---
 1 file changed, 37 insertions(+), 4 deletions(-)

(limited to 'Master/texmf-dist/source/latex/siunitx/siunitx-number.dtx')

diff --git a/Master/texmf-dist/source/latex/siunitx/siunitx-number.dtx b/Master/texmf-dist/source/latex/siunitx/siunitx-number.dtx
index ff97058d20f..e1cb9e639df 100644
--- a/Master/texmf-dist/source/latex/siunitx/siunitx-number.dtx
+++ b/Master/texmf-dist/source/latex/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}
-- 
cgit v1.2.3

