将任意数字转换为相应的单词

将任意数字转换为相应的单词

这是一个很疯狂的问题:有人能写一个代码把数字转换成相应的单词吗?例如:

4 -> 'four'
31 -> 'thirty-one'

等等。显然,建立一个数组来存储数字和与之关联的单词,然后只打印存储的单词而不是数字是不够的。让事情变得更加复杂的是像 11(“eleven”)这样的数字。我打算用它来编号方程式。那么,有人能做到吗?

答案1

您可以使用该fmtcount包来实现这一点:

\documentclass{minimal}
\usepackage{fmtcount}

\begin{document}

4: \numberstringnum{4}

31: \numberstringnum{31}

\end{document}

分别使用\Numberstringnum\NUMBERstringnum表示大写和全大写版本。

答案2

fmcount仅适用于 100,000 以下的数字。对于更大的数字,您需要使用numname它借用了 memoir 类的代码。据我回忆,这可以处理更大的数字。自述文件和软件包文档都没有真正告诉您要使用的命令是什么,因此它们如下:

  • \numtoname将数字转换为小写单词(例如 one)
  • \numtoName同上,但首字母大写
  • \NumToName如上所述,但所有单词都大写
  • \ordinaltoname将数字转换为 lc 序数(例如 first)
  • \ordinaltoName同上但首字母大写
  • \OrdinalToName同上但所有单词均大写

这个包似乎可以管理所有不超过 TeX 限制 2147483647 的数字。(numname有帮助地告诉我这是:二十亿,一亿四千七百四十八万三千六百四十七)

答案3

莫雷努姆软件包已经做到了这一点。

\documentclass{article}
\usepackage{moreenum}
\newcounter{mycounter}
\renewcommand{\themycounter}{\Nthwords{mycounter}}
\begin{document}

\setcounter{mycounter}{11}
\themycounter

\setcounter{mycounter}{470}
\themycounter

\end{document}

结果:

在此处输入图片描述

用于\nthwords小写。我认为在下一版本的软件包中,这些将更改为\nwords\Nwords

相关内容