JavaScript数字转换为单词-二十进制

3
我想创建一个数字转换成文字的工具,类似于这个网站:http://gwydir.demon.co.uk/jo/numbers/words/intro.htm。然而,我要为一种使用二十进制计数法(即以二十为单位计数)的外语创建此工具,需要将数字转换成文字的范围是1-199。
1-20很容易,但之后就有所变化了。20-39遵循“二十后一,二十后二”“一直到二十后十八的模式(即21至38),“二十后十九”(即39)。
40-99和120-199则不同,它们按“分数”计算:“一二十一”(即41),“二二十”(即42),“一三十”(即61),“一四十”(即81),“七二十”(即140),“一七十”(即141),“一九十”(即161),“五九十”(即190),“一九十一”(即191),“一九十九”(即199)。
100-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>

这是我用于1到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"

我的问题是,我该如何开始编写代码来将数字转换为正确的单词?有人能给我指出一些示例以帮助我吗?我看到过用于英语的示例,但由于数字系统差异太大,我无法想象如何将其转换为二十进制系统。

谢谢


你的第一个输入标签中有一个 m 而不是 n。 - Grezzo
我做了类似的事情http://jsfiddle.net/HUXUA/,它可能会有所帮助(注释和所有内容都是西班牙语,但代码本身是自说明的)编辑:哈哈,还有一些评论进一步将其转换为c#代码,对此感到抱歉。 - ajax333221
http://jsfiddle.net/RichardTowers/M2jTe/26 可能是一个好的开始。 - RichardTowers
2个回答

1

让我们通过一个例子来工作:考虑数字x

首先确定数字中有多少个100。我们这样做:x/100,因为整数除法会截断任何余数。所以这是我们的第一个部分:units[x/100] + "百"

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

这还不完美,因为它不能正确处理没有余数的数字,比如640。但这些只是一些特殊情况,我相信你可以轻松解决。


谢谢,我在这里提了一个新问题http://stackoverflow.com/questions/10861135/javascript-numbers-to-words-vigesimal-200-999,如果你还感兴趣的话。 - Bob

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


谢谢,我在这里提了一个新问题http://stackoverflow.com/questions/10861135/javascript-numbers-to-words-vigesimal-200-999,如果你还感兴趣的话。 - Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接