65.9K
CodeProject 正在变化。 阅读更多。
Home

将整数转换为其文本描述

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.34/5 (13投票s)

2002年4月1日

Apache

2分钟阅读

viewsIcon

163837

downloadIcon

1347

将整数转换为其文本描述

Sample Image

前言

是否想过以更友好的方式向用户显示任何给定的金额?或者,您是否正在编写语法正确的英语应用程序、赛车游戏、跟踪访问者或创建会计解决方案?无论哪种情况,有时程序员需要将数字表示为文字(例如,4 变为 "four")。这就是这个例程的目标。

最初的版本(与大多数典型的实现一样)使用字符串进行计算和转换,虽然它有效,但速度较慢。但是,我更新了算法,使其不再这样做。因此,我注意到平均速度提高了 310%(在 Pentium IV 上),尽管我还添加了对更大数字的支持。

用法

使用此例程很简单。它确实使用了 C 风格的字符串,因为它们速度快并且与大多数环境高度兼容。执行主要工作的唯一例程名为 GetNumWord(),其原型如下...

// prototype/signature
char *GetNumWord (long long llNumber, char *szDest, 
                  unsigned int unLen, bool bOrdinal, bool bUseAnd);

参数说明

llNumber = 这是要转换的 64 位数字。
szDest = 指向输出缓冲区(字符数组)的指针。
unLen = 输出缓冲区的大小(以字节为单位,而不是字符串长度)。
bOrdinal = 将此设置为 true 将返回数字的序数形式(例如,first);否则,将返回基数形式(例如,one)。
bUseAnd = 这将决定输出中是否使用 and 连词(例如,One Hundred And One)。

示例

char szBuffer[100] = {0};
GetNumWord(5001, szBuffer, sizeof(szBuffer), false, false);
GetNumWord(-10, szBuffer, sizeof(szBuffer), false, false);
GetNumWord(123, szBuffer, sizeof(szBuffer), true, true);

将返回...

"Five Thousand One"
"Negative Ten"
"One Hundred And Twenty-Third"

限制

该函数将 long long 作为数字参数。在大多数 32 位和 64 位系统上,这意味着您可以传递的最小数字是-9,223,372,036,854,775,808而最大数字是 9,223,372,036,854,775,807

此外,在 32 位 CPU 上进行 64 位运算会稍慢。但是,对于大多数应用程序而言,差异可以忽略不计,并且 64 位 CPU 正变得越来越主流,因此这种考虑很快就会过时。

致谢与历史

文章作者 - Jeremy Falcon
“and”连词建议 - benjymous
内存泄漏提示 - James Curran
  • 2007-01-13 - Ver. 2.0 发布。
  • 2002-04-12 - Ver. 1.1 发布。
  • 2002-04-01 - Ver. 1.0 发布。

许可证

允许任何人出于任何目的在任何计算机系统上使用此软件,并对其进行修改和自由重新分发,但须遵守 NumWord.c 中包含的以下限制。这没什么大不了的。基本上,它声明如果您的计算机爆炸,那不是我的错,如果您使用此代码,请归功于该代码的作者。

© . All rights reserved.