我想将数字四舍五入到百位数。我注意到将数字四舍五入到百位数。然而,问题问的是四舍五入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}