如何提取小数的整数部分和小数部分?

如何提取小数的整数部分和小数部分?

代码:

\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage[english]{babel}
\usepackage{fp}
\def\x{59.3612}
\begin{document}
\noindent
x = \x\\
%what to write here?
int(x) = 59\\
frac(x) = 3612
\end{document}

我应该调用什么函数才能从 \x 中获取 59 和 3612?

答案1

xint软件包开发者的说明:

文档不够清晰\xintDecSplitR整数唯一的宏(实际上它主要在内部使用,但不知为何我给了它一个公共接口)。因此,虚假的点是使用宏处理意外输入的后遗症。如果我在内部以其他方式编码,它可能是虚假的!或虚假的;。幸运的是,这个点确实可以通过 删除\xintNum

因此我建议使用 egreg 的方法,因为这个是出于偶然原因而工作的。xint同时实现了小数和分数,并且缺少实用程序,这只对定点数有意义。因此,这里没有针对所问问题的高级一次性接口。


以下是一种实现此操作的方法xint

\documentclass{article}
\usepackage{xintexpr}
\def\x{59.3612}

\newcommand{\getint}[1]{\xintNum{#1}\relax}
\newcommand{\getdec}[1]{\xintNum{\xintDecSplitR{0}{#1}}\relax}

\begin{document}
    The integer part: \xintNum{\x}\relax % Or just \getint{\x}
    
    The decimal part: \xintNum{\xintDecSplitR{0}{\x}}\relax % Or just \getdec{\x}
\end{document}

enter image description here


据我所知包装文档

\xintNum{x}截断小数x并返回整数值。

\xintDecSplit{n}{x}将数字x切成两部分并返回两个浮点数。如果n为 0,则在小数点处进行拆分。相应的命令\xintDecSplitR{n}{x}返回切割后右侧的数字,在本例中为 的小数部分x。我不得不将其包装在其自身中\xintNum以将浮点数转换为整数,这样您就不会在末尾得到虚假的点。

最后,可以将整个表达式包装在您自己的自定义命令中,就像我所做的那样\getint\getdec这样它就不会使您的主代码变得混乱。

答案2

只需在句点处分割输入。

\documentclass{article}

\makeatletter
\newcommand{\intpart}[1]{\expandafter\int@part#1..\@nil}
\def\int@part#1.#2.#3\@nil{\if\relax#1\relax0\else#1\fi}

\newcommand{\fracpart}[1]{\expandafter\frac@part#1..\@nil}
\def\frac@part#1.#2.#3\@nil{\if\relax#2\relax0\else#2\fi}
\makeatother

\begin{document}

59.3612: integral part \intpart{59.3612}, fractional part \fracpart{59.3612}

\def\x{59.3612}

\x: integral part \intpart\x, fractional part \fracpart\x

\def\x{42}

\x: integral part \intpart\x, fractional part \fracpart\x

\def\x{.3}

\x: integral part \intpart\x, fractional part \fracpart\x

\end{document}

enter image description here

答案3

\documentclass[border=1cm]{standalone}

\usepackage{fp}
\def\x{59.3612}
\begin{document}
\FPeval\front{round(\x:0)}
\FPeval\back{clip((\x-\front)*10000)}
\front\ and \back
\end{document}

enter image description here

相关内容