siunitx round-half=甚至不稳定的行为

siunitx round-half=甚至不稳定的行为

我正在尝试创建随机练习表(包括答案​​),学生可以在其中练习四舍五入到最接近的整数。这些练习将精确的一半四舍五入到最接近的偶数。例如,2.5 四舍五入为 2,3.5 四舍五入为 4。

我尝试使用包round-half=even中的选项来执行此操作siunitx,但结果似乎不稳定。来自以下 MWE:

\documentclass{article}
\usepackage{siunitx}
    \sisetup{round-half = even}

\begin{document}
$\num{2,6} \rightarrow \num[round-mode=places,round-precision=0]{2,6}$

$\num{3,6} \rightarrow \num[round-mode=places,round-precision=0]{3,6}$

$\num{12,6} \rightarrow \num[round-mode=places,round-precision=0]{12,6}$

$\num{13,6} \rightarrow \num[round-mode=places,round-precision=0]{13,6}$

$\num{14,6} \rightarrow \num[round-mode=places,round-precision=0]{14,6}$

\end{document}

我明白了

2.6 四舍五入为 2(错误)

3.6 四舍五入为 4(正确)

12.6 四舍五入为 12(错误)

13.6 四舍五入为 13(错误)

14.6 四舍五入为 14(错误)

有人知道为什么会出现这种情况吗? 有解决方法吗?

来自\listfiles,这是我的版本siunitx

 siunitx.sty    2018/05/17 v2.7s A comprehensive (SI) units package

编辑

@Werner 的输出和我不一样,尽管siunitx版本相同。下面是一张显示我的 texcode 输出的图片,\listfiles

在此处输入图片描述

答案1

临时解决办法是

\ExplSyntaxOn
\cs_set_protected:Npn \__siunitx_number_process_places_none:n #1
  {
    \prop_get:NnNT \l__siunitx_number_in_prop { #1 -decimal } \l__siunitx_tmpa_tl
      {
        \int_compare:nNnTF { \tl_head:N \l__siunitx_tmpa_tl } > 4
          {
            \prop_get:NnNTF \l__siunitx_number_in_prop { #1 -integer }
              \l__siunitx_tmpb_tl
              {
                \tl_set:Nx \l__siunitx_tmpb_tl
                  { \int_eval:n { \l__siunitx_tmpb_tl + 1 } }
                \bool_if:NF \l__siunitx_round_half_up_bool
                  {
                    \bool_lazy_and:nnT
                      {
                        \int_compare_p:nNn
                          { 0 \tl_head:N \l__siunitx_tmpa_tl } = 5
                      }
                      {
                        \int_compare_p:nNn
                          { 0 \tl_tail:N \l__siunitx_tmpa_tl } = 0
                      }
                      {
                        \int_if_odd:nT \l__siunitx_tmpb_tl
                          {
                            \tl_set:Nx \l__siunitx_tmpb_tl
                              { \int_eval:n { \l__siunitx_tmpb_tl - 1 } }
                          }
                      }
                  }
              }
              { \tl_set:Nn \l__siunitx_tmpb_tl { 1 } }
            \prop_put:NnV \l__siunitx_number_in_prop
              { #1 -integer } \l__siunitx_tmpb_tl
          }
          {
            \prop_if_in:NnF \l__siunitx_number_in_prop { #1 -integer }
              {
                \prop_put:Nnn \l__siunitx_number_in_prop
                  { #1 -integer } { 0 }
              }
          }
      }
    \prop_remove:Nn \l__siunitx_number_in_prop { #1 -decimal }
    \bool_if:NF \l__siunitx_process_int_to_dec_bool
      { \prop_remove:Nn \l__siunitx_number_in_prop { #1 -decimal-marker } }
  }
\ExplSyntaxOff

我今天将更新 CTAN 上的包。

相关内容