我正在尝试创建随机练习表(包括答案),学生可以在其中练习四舍五入到最接近的整数。这些练习将精确的一半四舍五入到最接近的偶数。例如,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 上的包。