我有以下功能:
% 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
宏来实现您的格式化目标。请注意,四舍五入到两位数是自动执行的,并且会将(逗号)设置为输出小数点标记。作为输入,或都可以作为小数点标记。\num
siunitx
,
,
.
\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选择英语约定。babel
autolanguage
babel
autolanguage
\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
支持德语、英语、法语、西班牙语、葡萄牙语和荷兰语的数字印刷惯例。