数字是整数吗?(使用 xfp 或 pgfmath 或 expl3 )

数字是整数吗?(使用 xfp 或 pgfmath 或 expl3 )

我继续测试从FP韓膠囊。结果不错,但有两个宏存在问题:\FPifint\FPClip。我没有找到如何在韓膠囊。我有数字(仅限十进制数 [+、-、0、...、9 和“。”])。我想知道一个数字是否是整数,但有第一个条件(还有第二个...):

1.0、15.00 等都是整数

\FPifint就像这样工作。我找到了一些解决方案,但并不完全令人满意,我宁愿避免加载另一个包。

  1. 比布拉特克斯\ifinteger(未测试)
  2. 字符串\IsInteger我不需要所有的东西)
  3. 回忆录\checkifinteger错误解决方案)
  4. 鲁阿lua_isinteger(未测试)

我尝试寻找一个个人解决方案:

% !TEX TS-program = lualatex-dev

\documentclass{article}
\usepackage{xfp,pgffor} 
 %xfp because i wanted to use \fpeval for some tests
\newif\ifinteger

\makeatletter
\def\removedot#1.{#1}
\newcommand\getinteger[1]{\expandafter\@getinteger#1.\@nil}
\def\@getinteger#1.#2\@nil{%
  \ifx\empty#2\empty
    \integertrue
    \else
    \ifnum\removedot#2=0   
        \integertrue
     \else 
       \integerfalse
     \fi
  \fi
}

\parindent=0pt

\begin{document}
\foreach \value in {+1 ,-1.00,0.75,10000,0.9998}{
\getinteger{\value}
\ifinteger
\value{} is considered an integer
\else
\value{} is not considered  an integer
\fi
\\}

\end{document}

首先,我不确定我的代码是否正确,我想知道如何使用 expl3 来翻译它(或者宏可能附带 xfp?)

我也在寻找一个宏来从小数中删除所有不必要的零,例如FPClip

还有另一个条件:我想接受以 999 结尾的十进制数作为整数。因此 1.999 或 .999 将被视为十进制。我的想法是使用我的代码测试 # 2,但我没有找到令人满意的方法

在此处输入图片描述

答案1

您可以只使用 fpeval 和 latex2e 测试,但我在这里使用了 expl3 条件

在此处输入图片描述

\documentclass{article}

\usepackage{xfp}

\ExplSyntaxOn
\newcommand\test[1]{
\fp_compare:nTF{0.01 < abs(round(#1)-#1)}
}
\ExplSyntaxOff
\begin{document}


10 \test{10}{no}{yes}


9.99 \test{9.99}{no}{yes}

1.2 \test{1.2}{no}{yes}

\end{document}

相关内容