如何将数字四舍五入为百位数,即最接近 100 的倍数

如何将数字四舍五入为百位数,即最接近 100 的倍数

我想将数字四舍五入到百位数。我注意到将数字四舍五入到百位数。然而,问题问的是四舍五入2,386.0 向下2,300.0— — 我希望它向上舍入为2,400.0, 我希望2,326.0它向下舍入为2,300.0

这个怎么做?

根据 joseph-wright 的评论,这很容易,但在阅读并尝试了一个小时后,我决定在这里询问。

平均能量损失

\documentclass{article}
\usepackage{xparse,siunitx}
\ExplSyntaxOn
\NewDocumentCommand{\hundreds}{O{}m}
 {
  \num[#1]{\fp_eval:n { trunc(#2,-2) }}
 }
\ExplSyntaxOff
\newcommand{\myhundreds}[1]{\num[round-mode=figures,round-precision=-2]{#1}}
\begin{document}

\hundreds{2348}

\hundreds[group-four-digits,group-separator={,}]{2348}

\sisetup{group-four-digits,group-separator={,}}

\hundreds{2399}

\hundreds{2301}

\myhundreds{2300}
\end{document}

答案1

使用round而不是trunc。来自l3fp文档:

在此处输入图片描述

\documentclass{article}
\usepackage{xparse,siunitx}

\ExplSyntaxOn
\NewDocumentCommand{\hundreds}{O{}m}
 {
  \num[#1]{\fp_eval:n { round(#2,-2) }}
 }
\ExplSyntaxOff

\begin{document}

\hundreds{2348}

\hundreds[group-four-digits,group-separator={,}]{2348}

\sisetup{group-four-digits,group-separator={,}}

\hundreds{2399}

\hundreds{2301}

\end{document}

这将打印2300 2,300 2,400 2,300

答案2

为了多样化,这里提供基于 LuaLaTeX 的解决方案。它提供了一个名为 的 LaTeX 宏\hundreds。此宏的输入必须是一个数字或一个根据 Lua 语法规则求值为数字的表达式;其输出是四舍五入到最接近的 100 倍数的数字。LaTeX 宏\hundreds使用 LuaTeX 的tex.sprint函数以及一个名为 的实用 Lua 函数,该math.round_int函数将数字四舍五入到最接近的整数。

\hundreds宏可以放置在参数中,\num以便进一步实现漂亮的打印。

在此处输入图片描述

\documentclass{article}
\usepackage[group-four-digits,group-separator={,}]{siunitx} % for \num macro   
% define a Lua function called 'math.round_int':
\directlua{%
function math.round_int ( x )
   return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
end
}
\newcommand{\hundreds}[1]{\directlua{%
   tex.sprint(100*math.floor(math.round_int((#1)/100)))}}

\begin{document}
\hundreds{2348};
\hundreds{2399};
\hundreds{2301};
\hundreds{23*100+10}; % arg evaluates to '2310'
\num{\hundreds{2301}}
\end{document}

相关内容