为什么 3x4=12.0 有一个小数?

为什么 3x4=12.0 有一个小数?

为什么\pgfmathresult3x4的结果显示为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}

在此处输入图片描述

相关内容