3

我想创建一个数字到单词的转换器,例如这个http://gwydir.demon.co.uk/jo/numbers/words/intro.htm

但是,我正在为使用十进制数字系统的外语做这件事 - 以二十来计数。我想从 1-199 开始。

1-20很容易,但之后它会改变。20-39 遵循“二十对一”(21)、“二十对二”(22)、直到“二十对十八”(38)、“二十对十九”(39) 的模式。

40-99 和 120-199 仍然不同,因为它计入分数:“一二二十”(41),“二二二十”(42),“一三二十”(61),十和三二十(70),十一三二十(71),'一四二十'(81),'六二十'(120),'一六二十'(121),'九二十'(180),'一九二十' (181), '十九九二十' (199)

100-119类似于英文:一百零一(101),一百零二(102),一百一十一(111),一百一十九(119)

这是我用于输入表单的 html:

<table align=center>
<tr><td>
<form action="#" name="conv">
Enter number:
<input type="text" name="numb" size="15">
<input type="button" value="Show number" onclick="getnum(document.conv.numb.value)">
</form>
</td></tr>
<tr><td align=center><span id="outp">&nbsp;</span></td></tr>
</TABLE>

这是我拥有的最多 20 个数字的 Javascript:

var units = new Array(21)
units[0]=""
units[1]="onen"
units[2]="dew"
units[3]="tri"
units[4]="pajar"
units[5]="pemp"
units[6]="whegh"
units[7]="seyth"
units[8]="eth"
units[9]="naw"
units[10]="deg"
units[11]="udnek"
units[12]="dowdhek"
units[13]="tredhek"
units[14]="peswardhek"
units[15]="pemthek"
units[16]="whetek"
units[17]="seytek"
units[18]="etek"
units[19]="nownsek"
units[20]="ugens"

我的问题是,如何开始创建允许我将数字转换为正确单词的代码?谁能指出一些有帮助的例子?我已经看到为英语完成的示例,但由于数字系统非常不同,我看不出如何将其转换为 vigesimal 系统。

谢谢

4

2 回答 2

1

让我们看一个例子:考虑数字x

首先弄清楚数字中有多少个100。我们这样做是这样的:x/100因为整数除法会截断任何余数。这就是我们的第一部分:units[x/100] + " hundred"

现在让我们做余数,由 给出y=x%100。有y/20二十个。而y%20剩下。所以字符串的其余部分是units[y%20] + " and " + units[y/20] + " " units[20].

这还不是 100% 完美,因为它不能正确处理没有余数(如 640)的数字。但这些只是一些特殊情况,我相信你可以毫无困难地弄清楚。

于 2012-06-01T22:30:09.087 回答
1

以下函数应该让您了解如何处理这个问题:

function getnum(s){
    var n = parseInt(s);

    if( 1 <= n && n <= 20 ){ alert(units[n]); }

    if( (40 <= n && n <= 99) || (120 <= n && n <= 199) ){
      var q = Math.floor(n / 20);
      var r = n % 20;

      !r && (alert (units[q] + ' ' + units[20]));

      r && (alert (units[r] + ' and ' + units[q] + ' ' + units[20]));    
    }    
}

现在您应该能够计算出100 <= number <= 119. 也类似21 <= number <= 39

于 2012-06-01T22:32:46.587 回答