地板命令

地板命令

我需要一些与 floor() 对应的东西以便在宏中使用它(我不是指符号,我实际上是指向下舍入的函数)。

像这样:

\floor{34.75}生产34

有人有主意吗?

答案1

使用 的浮点模块expl3;它还可以接受非常自然形式的表达式,甚至是科学格式。

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\floor}{m}
 {
  \fp_eval:n { floor ( #1 ) }
 }
\ExplSyntaxOff

\begin{document}

$\floor{34.75}$

$\floor{-1.25}$

$\floor{2}$

$\floor{-1}$

$\floor{.3}$

$\floor{-.2}$

$\floor{7/3}$

$\floor{1e2/31}$

$\floor{-1000/333}$

$\floor{1000/333-1/332}$

$\floor{5*12/(2+9)}$

\end{document}

请注意,这是完全可扩展的,因此它甚至可以进入\edef。我用$...$它来避免减号问题。

在此处输入图片描述

答案2

您也可以使用pgf数学。因为这是pgf可以评估的各种数学表达式:

在此处输入图片描述

笔记:

  • 和这里的其他答案floor{-1}之间存在差异,我认为这是一个错误?pgf

代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}

\newcommand{\Floor}[1]{%
    \pgfmathparse{int(floor(#1))}%
    \text{Floor} (#1)=\pgfmathresult%
}%

\begin{document}


$\Floor{34.75}$

$\Floor{-1.25}$

$\Floor{2}$

$\Floor{-1}$

$\Floor{.3}$

$\Floor{-.2}$

$\Floor{7/3}$

$\Floor{1e2/31}$

$\Floor{-1000/333}$

$\Floor{1000/333-1/332}$

$\Floor{5*12/(2+9)}$

\medskip
$\Floor{sin(90)}$

$\Floor{sin(-75)}$


$\Floor{cos(90)}$

$\Floor{cos(200)}$

\end{document}

答案3

来晚了,这里有一个基于 Lua 的方法。可能有点过头了,但嘿,这很有趣。:)

\documentclass{article}

\usepackage{luacode}

\newcommand\floor[1]{\luadirect{tex.print(math.floor(#1))}}

\begin{document}

$\floor{34.75}$

$\floor{-1.25}$

$\floor{2}$

$\floor{-1}$

$\floor{.3}$

$\floor{-.2}$

$\floor{7/3}$

$\floor{1e2/31}$

$\floor{-1000/333}$

$\floor{1000/333-1/332}$

$\floor{5*12/(2+9)}$

\end{document}

代码借自 egreg:)

答案4

使用\xintFloor命令xintfrac包裹。

  1. 它是完全可扩展的,因此甚至可以用于\edef需要可扩展性的其他环境。

  2. 它本身接受分数作为1000/333输入,以及科学计数法,例如 1.234e2;如果您需要涉及中缀运算的更一般的输入,则可以使用floor 包提供的函数 xintexpr

  3. 还要注意,输入的大小不受限制,例如

    \xintFloor {100000000000000000000000/100000000000000000000001}

    确实提供了正确的值0,而不是1由于分子和分母被截断为精度较低的近似值而导致的。您还可以考虑:

    \xinttheexpr floor (100+3828/9007+3752/9005-3376/9003-4201/9002)\relax

    正确结果是99,而不是100。或者

    \xinttheexpr floor(1+600001/900002+450002/900003-150001/900005)\relax

    正确找到1并且不2

例子

\documentclass{article}
\usepackage{xintfrac}

\begin{document}

$\xintFloor{34.75}$,
$\xintFloor{-1.25}$,
$\xintFloor{2}$,
$\xintFloor{-1}$,
$\xintFloor{.3}$,
$\xintFloor{-.2}$

and also
$\xintFloor{7/3}$,
$\xintFloor{1e2/31}$,
$\xintFloor{-1000/333}$, and
$\xintFloor {100000000000000000000000/100000000000000000000001}$.

\end{document}

并且通过\usepackage{xintexpr}可以做如下事情:

\xinttheexpr floor(1000/333-1/332)\relax 

相关:\xintCeil或-essionsceil中的功能\xintexpr

还相关:\xintTFracfrac函数,它们提取小数部分。

相关内容