javascript字到数转换器中缺少空格

javascript字到数转换器中缺少空格,javascript,math,numbers,converter,Javascript,Math,Numbers,Converter,我已经为0-999创建了一个数字到单词的转换器,除了一个bug,它几乎可以完美地工作 在某些超过一百的数字中,“一百”部分和“十个/单位”部分之间缺少一个空格 例如,864给出了“eth canspajar ha tri-ugens”,其中罐子和pajar之间需要有一个空间(百=罐) 这似乎是一个常见的问题,因为它发生在164、264、364等数字以及其他数字的范围内 任何对Javascript或数学有更深入了解的人都可以看看我的代码,看看他们是否能够发现模式或解决方案?代码取自一个我没有制作的

我已经为0-999创建了一个数字到单词的转换器,除了一个bug,它几乎可以完美地工作

在某些超过一百的数字中,“一百”部分和“十个/单位”部分之间缺少一个空格

例如,864给出了“eth canspajar ha tri-ugens”,其中罐子和pajar之间需要有一个空间(百=罐)

这似乎是一个常见的问题,因为它发生在164、264、364等数字以及其他数字的范围内

任何对Javascript或数学有更深入了解的人都可以看看我的代码,看看他们是否能够发现模式或解决方案?代码取自一个我没有制作的法语数字转换器,而且我对Javascript比较陌生,所以要完全理解其中的所有内容对我来说很难

您可以在下面或上看到代码

非常感谢

    function num2Letters(number) {

        if (isNaN(number) || number < 0 || 999 < number) {
            return 'Veuillez entrer un nombre entier compris entre 0 et 999.';
        }

        var units2Letters = ['', 'onen', 'dew', 'tri', 'pajar', 'pemp', 'whegh', 'seyth', 'eth', 'naw', 'deg', 'udnek', 'dowdhek', 'tredhek', 'peswardhek', 'pemthek', 'whetek', 'seytek', 'etek', 'nownsek'],
            tens2Letters  = ['', 'deg', 'ugens', 'warn ugens', 'dew ugens', 'ha dew ugens', 'tri ugens', 'ha tri ugens', 'pajar ugens', 'ha pajar ugens'];
            twenties2Letters  = ['', 'deg', 'ugens', 'warn ugens', 'dew ugens', 'ha dew ugens', 'tri ugens', 'ha tri ugens', 'pajar ugens', 'ha pajar ugens', 'pemp ugens', 'ha pemp ugens', 'whegh ugens', 'ha whegh ugens', 'seyth ugens', 'ha seyth ugens', 'eth ugens', 'hag eth ugens', 'naw ugens', 'ha naw ugens'];
            hundreds2Letters  = ['', 'cans', 'dew cans', 'tri hans', 'pajar cans', 'pemp cans', 'whegh cans', 'seyth cans', 'eth cans', 'naw cans'];

        var units    = number % 10,
            tens     = (number % 100 - units) / 10,
            twenties = (number % 200 - units) / 10,
            hundreds = (number % 1000 - number % 100) / 100;

        var unitsOut, tensOut, twentiesOut, hundredsOut;


        if (number === 0) {

            return 'mann';

        } else {

            // THE UNITS

        unitsOut = units2Letters[units];

            // THE TENS

            if (tens === 1 && units > 0) {

                tensOut = units2Letters[10 + units];
                unitsOut = '';

            } else if (tens === 2 && units !== 0 ) {

                tensOut = units2Letters[units] + ' warn ' + tens2Letters[tens];
                unitsOut = '';

            } else if (tens === 3) {

                tensOut = units2Letters[10 + units] + ' ' + tens2Letters[tens];
                unitsOut = '';


            } else if ((tens === 4 && units !== 0) || (tens === 6 && units !== 0) || (tens === 8 && units !== 0)) {

                tensOut = units2Letters[units] + ' ha ' + tens2Letters[tens];
                unitsOut = '';

            } else if (tens === 5 || tens === 7 || tens === 9) {

                tensOut = units2Letters[10 + units] + ' ' + tens2Letters[tens];
                unitsOut = '';

            } else {

                tensOut = tens2Letters[tens];

            }





            // THE TWENTIES - used only for 120-199

           if ((number >= 121 && number <= 199) && (tens === 2 || tens === 4 || tens === 8) && units > 0) {

                twentiesOut = units2Letters[units] + ' ha ' + twenties2Letters[twenties];

            } else if ((number >= 121 && number <= 199) && (tens === 3 || tens === 5 || tens === 7 || tens === 9) ) {

                twentiesOut = units2Letters[10 + units] + ' ' + twenties2Letters[twenties];

            } else if ((number >= 121 && number <= 199) && (tens === 6 ) ) {

                twentiesOut = units2Letters[units] + ' hag ' + twenties2Letters[twenties];

            } else {

                twentiesOut = twenties2Letters[twenties];

            }







            // THE HUNDREDS

        //if the number is x01-09 or number is x1x or number is x2x or number is x3x then add a hag/ha after the number (hag if the number is xx1 or xx8 or x20)
            if ((hundreds >= 1 && tens === 0 && units >= 1) || hundreds >= 1 && tens === 1 || hundreds >= 1 && tens === 2 || hundreds >= 1 && tens === 3) {

                hundredsOut = hundreds2Letters[hundreds] + (hundreds >= 1 && (units === 1 || units === 8) || hundreds >= 1 && tens === 2 && units === 0 ? ' hag ' : ' ha ');


           // insert a ha for 40, 60 and 80 above 200
            } else if (hundreds >= 2 && (tens === 4 || tens === 6 || tens === 8) && units === 0) {

                hundredsOut = hundreds2Letters[hundreds] + ' ha ';

            } else {

                hundredsOut = hundreds2Letters[hundreds];

            }


            // GET TOTAL

            if (number === 50) {

                return hundredsOut + (hundredsOut && tensOut ? ' ': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut + ' <i>or</i> hanter cans';

            } else if (number === 150) {

                return hundredsOut + (hundredsOut && tensOut ? ' ': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut + ' <i>or</i> deg ha seyth ugens <i>or</i> onen cans ha hanter';

            } else if (hundreds > 1 && tens === 5 && units === 0 ) {

                return hundredsOut + (hundredsOut && tensOut ? ' ': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut + ' <i>or</i> ' + hundredsOut + ' ha hanter';

            } else if (hundreds === 1 && (tens === 2 || tens === 3 || tens === 4 || tens === 5 || tens === 6 || tens === 7 || tens === 8 || tens === 9) ) {

                return twentiesOut + ' <i>or</i> ' + hundredsOut + (hundredsOut && tensOut ? '': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut;

            } else {

            return hundredsOut + (hundredsOut && tensOut ? '': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut;

            }

        }

    }



    var userEntry;

    while (userEntry = prompt('Enter a number between 0 and 999:')) {

        alert(num2Letters(parseInt(userEntry, 10)));

    }
函数num2字母(数字){
如果(isNaN(数字)| |数字<0 | | 999<数字){
返回'Veuillez entre un nombre enter compris entre 0 et 999';
}
var单位2字母=['','onen','dew','tri','pajar','pemp','Wheeh','seyth','eth','naw','deg','udnek','dowdhek','tredhek','peswardhek','pemthek','Wheek','seytek','etek','nownsek'],
tens2Letters=['','deg','ugens','warn ugens','dew ugens','ha dew ugens','tri ugens','ha tri ugens','pajar ugens','ha pajar ugens'];
二十个字母=[“‘deg’、‘ugens’、‘warn ugens’、‘dew ugens’、‘ha dew ugens’、‘tri ugens’、‘ha tri ugens’、‘pajar ugens’、‘ha pajar ugens’、‘pemp ugens’、‘ha pemp ugens’、‘wheagh ugens’、‘seyth ugens’、‘ha seyth ugens’、‘eth ugens’、‘naw ugens’;
百分之二的字母=[“‘罐’、‘露罐’、‘三汉斯’、‘帕贾尔罐’、‘pemp罐’、‘Wheh罐’、‘seyth罐’、‘eth罐’、‘naw罐’”;
var单位=数量%10,
十位数=(数字%100-单位)/10,
二十件=(数量%200-单位)/10,
百分之一百=(数字%1000-数字%100)/100;
var unitsOut、tensOut、twentiesOut、Hundredout;
如果(数字==0){
返回“mann”;
}否则{
//单位
unitsOut=单位2个字母[单位];
//十
如果(十位数===1&&units>0){
张量=单位2个字母[10+单位];
unitsOut='';
}else if(十位数===2&&units!==0){
时差=单位2字母[单位]+“警告”+时差2字母[十];
unitsOut='';
}else if(十位数===3){
时差=单位2个字母[10+单位]+''+时差2个字母[10];
unitsOut='';
}else如果((十个===4和单位!==0)| |(十个===6和单位!==0)| |(十个===8和单位!==0)){
时差=单位2个字母[单位]+“ha”+时差2个字母[十];
unitsOut='';
}else if(十=5 | |十=7 | |十=9){
时差=单位2个字母[10+单位]+''+时差2个字母[10];
unitsOut='';
}否则{
tensOut=tens2Letters[十];
}
//20年代-仅用于120-199年
如果((编号>=121&&0){
twentiesOut=单位2字母[单位]+“ha”+Twenties2字母[二十];
}如果((数字>=121&&number=121&&number=1&&tens==0&&units>=1)&&tens>=1&&tens==1&&tens==1&&tens>=1&&tens==2&&tens>=1&&tens==3){
百分位数=百分位数2个字母[百分位数]+(百分位数>=1&&(单位==1 | |单位==8)| |百分位数>=1&&十位数==2&&units==0?'hag':'ha');
//在200以上的40、60和80处插入ha
}否则,如果(百位>=2&&(十位==4 | |十位==6 | |十位==8)&&units==0){
百分之一百=百分之二十字母[百]+“哈”;
}否则{
百分之一百=百分之二十字母[百];
}
//合计
如果(数字=50){
返回百分之十+(百分之十和十分之十?“”)+十分之十+十分之十和十分之十| |十分之十和十分之十?“”)+十分之十+“或汉特罐”;
}否则如果(数字===150){
返回百分输出+(百分输出和单位输出?'':'')+tensOut+(百分输出和单位输出?'')+unitsOut+'或deg ha seyth ugens或One cans ha hanter';
}else if(百位数>1&&tens==5&&units==0){
返回百分输出+(百分输出和单位输出?“”:“”)+百分输出和单位输出+(百分输出和单位输出?“”)+单位输出+”或“+百分输出+”哈汉特“;
}否则如果(百分位==1&(十分位==2 | |十分位==3 | |十分位==4 | |十分位==5 | |十分位==6 | |十分位==7 | |十分位==8 | |十分位==9)){
返回twentiesOut+'或'+hundredsOut+(hundredsOut&tensOut?'''':'')+tensOut+(hundredsOut&unitsOut | | tensOut&unitsOut?'':'')+unitsOut;
}否则{
返回百分位输出+(百分位输出和单位输出?“”“”)+(百分位输出和单位输出?“”)+单位输出;
}
}
}
var用户入口;
while(userEntry=prompt('输入一个介于0和999之间的数字:')){
警报(num2Letters(parseInt(userEntry,10));
}

相反,为了找到缺少的空格,我建议您重新构造代码,这样您就不会动态地合成字符串,而是将短语的组成部分添加到数组中(根据需要使用
push
concat
),然后在数组上调用
join

比如说

var result = ['eth','cans'];
result.push('pajar');
result = result.concat(['ha','tri','ugens']);
alert(result.join(' '));
这里的优点是您的代码更干净,您不必担心trimmin
    } else if (hundreds === 1 && (tens === 2 || tens === 3 || tens === 4 || tens === 5 || tens === 6 || tens === 7 || tens === 8 || tens === 9) ) {

        return twentiesOut + ' <i>or</i> ' + hundredsOut + (hundredsOut && tensOut ? '': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut;