如何将数字四舍五入到小数点后两位并使用逗号分隔符?

如何将数字四舍五入到小数点后两位并使用逗号分隔符?

我有以下功能:

% Formats inputed number with 2 digits after the decimal place
\newcommand*{\formatNumber}[1]{\FPround{\cost}{#1}{2}\cost} %

\cost在此之前要经过一些计算。

是否可以将其更改为四舍五入到小数点后 2 位并使用逗号作为分隔符?

答案1

expl3提供多种格式选项siunitx.以下内容应该可以满足您的需求:

\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn
  \cs_new_eq:NN \calc \fp_eval:n
\ExplSyntaxOff

\newcommand*{\formatNumber}[2][]{\num[%
  round-mode=places,% Round output to specified number of places
  round-precision=3,% Round-precision is 3
  output-decimal-marker={,},% Use , as decimal marker
  #1% Other options
  ]{\calc{#2}}}

\begin{document}

\formatNumber{2*3/5+pi}% 4.342

\formatNumber[round-precision=1]{2*3/5+pi}% 4.3

\newcommand{\cost}{20}

\formatNumber{\cost+pi}% 23.142

\end{document}

4,342
4,3
23,142

可以全局设置选项(通过\sisetup{<options>}),也可以在本地设置,就像在 的选项中所做的那样\num[<options>]

答案2

我建议您加载该包并创建一个专用宏,使用包提供的siunitx宏来实现您的格式化目标。请注意,四舍五入到两位数是自动执行的,并且会将(逗号)设置为输出小数点标记。作为输入,或都可以作为小数点标记。\numsiunitx,,.

在此处输入图片描述

\documentclass{article}
\usepackage{siunitx}
\newcommand*{\mynum}[1]{\num[output-decimal-marker={,},
                             round-mode=places,
                             round-precision=2,
                             group-digits=false]{#1}}
\newtheorem{theorem}{Theorem}
\begin{document}
\mynum{12345.6789}

\newcommand{\cost}{9876,5432}  % just for this example
\mynum{\cost}
\end{document}

答案3

另一个选择是numprint包及其命令\nprounddigits{},由 关闭\npnoround

的默认语言是德语,其默认印刷约定也是如此。您可以使用选项numprint切换到包的选项中指定的语言。如果没有加载,则该选项使numprint选择英语约定。babelautolanguagebabelautolanguage

\documentclass{article}
\usepackage[np, autolanguage]{numprint}
\begin{document}
  \nprounddigits{2}
  \np{2.192}\quad\np{2.199}\quad\np{1.1853}\par
  \npnoround
  \np{1.1853}
\end{document}

在此处输入图片描述

\usepackage[french]{babel}否则,如果您在文档的序言中插入了以下内容,则autolanguage选项numprint将使您的文档遵循法语的印刷惯例:

在此处输入图片描述

到目前为止,numprint支持德语、英语、法语、西班牙语、葡萄牙语和荷兰语的数字印刷惯例。

相关内容