将整数转换为其文本描述






3.34/5 (13投票s)
将整数转换为其文本描述
前言
是否想过以更友好的方式向用户显示任何给定的金额?或者,您是否正在编写语法正确的英语应用程序、赛车游戏、跟踪访问者或创建会计解决方案?无论哪种情况,有时程序员需要将数字表示为文字(例如,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 正变得越来越主流,因此这种考虑很快就会过时。
致谢与历史
|
许可证
允许任何人出于任何目的在任何计算机系统上使用此软件,并对其进行修改和自由重新分发,但须遵守 NumWord.c 中包含的以下限制。这没什么大不了的。基本上,它声明如果您的计算机爆炸,那不是我的错,如果您使用此代码,请归功于该代码的作者。