为什么\pgfmathresult
3x4的结果显示为12.0?
\documentclass{article}
\usepackage{pgf}
\begin{document}
\pgfmathparse{3*4}
\pgfmathresult
\end{document}
此代码生成的文档的唯一内容是“12.0”。
在我正在处理的文档的某些部分,我需要小数,但二年级数学不需要。
我该如何解决?
答案1
首先,当您说 时,您没有格式化数字\pgfmathresult
。其次,您没有为数字打印指定任何特定格式。(尽管在这种情况下默认格式就可以了。)
比较:
\documentclass{article}
\usepackage{pgf}
\begin{document}
\pgfmathparse{3*4}
\pgfmathresult
\pgfmathprintnumber\pgfmathresult
\pgfmathparse{int(3*4)}
\pgfmathresult
\pgfkeys{% just for example - doesn't actually matter here
/pgf/number format/int detect,
}
\pgfmathparse{3*4}
\pgfmathprintnumber\pgfmathresult
\end{document}
PGF 不知道您正在排版二年级数学而不是核工程博士论文!
答案2
PGF 返回的标准表示是带有小数部分,即使是.0
,这也是由于内部工作方式(.0
当请求打印寄存器的值时, TeX 会添加\dimen
,而 PGF 只会删除尾随的pt
),除非您声明该操作返回整数。
另一种方法是使用expl3
,其浮点模块仅在非零时添加小数部分:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \fpeval \fp_eval:n % get a user level version
\ExplSyntaxOff
\begin{document}
\fpeval{3*4}
\end{document}
请注意,您甚至不需要双步\pgfmathresult
。浮点模块的精度符合 IEEE 标准,与 PGF 提供的标准相反。
使用 PGF 尝试以下操作,您就会知道该走哪条路。
\documentclass{article}
\usepackage{expl3,siunitx}
\ExplSyntaxOn
\cs_set_eq:NN \fpeval \fp_eval:n % get a user level version
\ExplSyntaxOff
\begin{document}
\fpeval{333*444}
\num[group-separator={\,}]{\fpeval{333*444}}
\num[group-separator={,}]{\fpeval{333*444}}
\end{document}