当前位置: 首页 > 面试题库 >

JavaScript数字转Words

秦诚
2023-03-14
问题内容

我正在尝试将数字转换为英文单词,例如 1234 会变成:“ 1232.4 ”。

我的战术是这样的:

  • 将数字分隔为三,然后finlOutPut从右到左将它们放在Array()上。

  • finlOutPut三位数字的每个组(数组中的每个单元格)转换为一个单词(此triConvert函数的作用)。如果所有三个数字均为零,则将它们转换为"dontAddBigSuffix"

  • 从右到左,添加 千,百万,十亿等 。如果finlOutPut单元格等于"dontAddBigSufix"(因为只有零),则不要添加单词并将单元格设置为" "(无)。

看来效果很好,但是我遇到了一些问题,例如19000000 9 ,转换为:“ 一亿九千万 ”。当有几个零时,它将以某种方式“忘记”最后一个数字。

我做错了什么?错误在哪里?为什么它不能完美运行?

<html>
<头>
<meta http-equiv =“ Content-Type” content =“ text / html; charset = utf-8” />

<script type =“ text / javascript”>
函数update(){
    var bigNumArry = new Array('','千','百万','十亿','兆','四分之一','五亿');

    var output ='';
    var numString = document.getElementById('number')。value;
    var finlOutPut = new Array();

    如果(numString =='0'){
        document.getElementById('container')。innerHTML ='零';
        返回;
    }

    如果(numString == 0){
        document.getElementById('container')。innerHTML ='messeg告诉输入数字';
        返回;
    }

    var i = numString.length;
    i = i-1;

    //将数字切成三位数的小样,然后将其添加到Arry中
    而(numString.length> 3){
        var triDig = new Array(3);
        triDig [2] = numString.charAt(numString.length-1);
        triDig [1] = numString.charAt(numString.length-2);
        triDig [0] = numString.charAt(numString.length-3);

        var varToAdd = triDig [0] + triDig [1] + triDig [2];
        finlOutPut.push(varToAdd);
        一世 - ;
        numString = numString.substring(0,numString.length-3);
    }
    finlOutPut.push(numString);
    finlOutPut.reverse();

    //将每个三位数的单词转换为英语单词
    //如果所有数字均为零,则triConvert
    //函数返回字符串“ dontAddBigSufix”
    for(j = 0; j <finlOutPut.length; j ++){
        finlOutPut [j] = triConvert(parseInt(finlOutPut [j]));
    }

    var bigScalCntr = 0; //此int标志着一万亿亿美元... Arry

    对于(b = finlOutPut.length-1; b> = 0; b--){
        如果(finlOutPut [b]!=“ dontAddBigSufix”){
            finlOutPut [b] = finlOutPut [b] + bigNumArry [bigScalCntr] +',';
            bigScalCntr ++;
        }
        其他{
            //将finlOP [b]处的字符串从“ dontAddBigSufix”替换为空字符串。
            finlOutPut [b] ='';
            bigScalCntr ++; //提前柜台  
        }
    }

        //将输出Arry转换为,更可打印的字符串 
        for(n = 0; n <finlOutPut.length; n ++){
            输出+ = finlOutPut [n];
        }

    document.getElementById('container')。innerHTML = output; //打印输出
}

//简单的函数,可将数字转换为1到999的单词
函数triConvert(num){
    varones = new Array('',``一个'',``两个'',``三个'',``四个'',``五个'',``六个'',``七个'',``八个'',``九个'',``十个'',``十一”,“十二”,“十三”,“十四”,“十五”,“十六”,“十七”,“十八”,“十九”);
    var tens = new Array('',``,'二十','三十','四十','五十','六十','七十','八十','九十');
    var一百='一百';
    var output ='';
    var numString = num.toString();

    如果(num == 0){
        返回'dontAddBigSufix';
    }
    // 10,11,12,13,.... 19的情况 
    如果(num <20){
        输出=个[数字];
        返回输出;
    }

    // 100以上
    如果(numString.length == 3){
        输出=个[parseInt(numString.charAt(0))] +百;
        输出+ = tens [parseInt(numString.charAt(1))];
        输出+ =个[parseInt(numString.charAt(2))];
        返回输出;
    }

    输出+ = tens [parseInt(numString.charAt(0))];
    输出+ =个[parseInt(numString.charAt(1))];

    返回输出;
}   
</ script>

</ head>
<身体>

<input type =“ text”
    id =“ number”
    大小=“ 70”
    onkeyup =“ update();”
    / *此代码可防止非数字字母* / 
    onkeydown =“ return(event.ctrlKey || event.altKey 
                    || (47 <event.keyCode && event.keyCode <58 && event.shiftKey == false)
                    || (95 <event.keyCode && event.keyCode <106)
                    || (event.keyCode == 8)|| (event.keyCode == 9)
                    || (event.keyCode> 34 && event.keyCode <40)
                    || (event.keyCode == 46))“ />
                    <br/>
<div id =“ container”>此处打印的数字</ div>
</ body>
</ html>

问题答案:

当前导零数字时,JavaScript会将3个数字的组解析为八进制数字。当三位数字的组全部为零时,无论基数是八进制还是十进制,结果都是相同的。

但是,当您给JavaScript‘009’(或‘008’)时,这是一个无效的八进制数字,因此您会得到零。

如果您经历了从190,000,001到190,000,010的整个数字集,您将看到JavaScript跳过’…,008’和’…,009’,但是为’…,010’发出‘8’。那就是“尤里卡!”
时刻。

更改:

for (j = 0; j < finlOutPut.length; j++) {
    finlOutPut[j] = triConvert(parseInt(finlOutPut[j]));
}

for (j = 0; j < finlOutPut.length; j++) {
    finlOutPut[j] = triConvert(parseInt(finlOutPut[j],10));
}

代码还在每个非零组之后继续添加逗号,因此我玩了一下,找到了添加逗号的正确位置。

旧:

for (b = finlOutPut.length - 1; b >= 0; b--) {
    if (finlOutPut[b] != "dontAddBigSufix") {
        finlOutPut[b] = finlOutPut[b] + bigNumArry[bigScalCntr] + ' , ';
        bigScalCntr++;
    }
    else {
        //replace the string at finlOP[b] from "dontAddBigSufix" to empty String.
        finlOutPut[b] = ' ';
        bigScalCntr++; //advance the counter  
    }
}

    //convert The output Arry to , more printable string 
    for(n = 0; n<finlOutPut.length; n++){
        output +=finlOutPut[n];
    }

新:

for (b = finlOutPut.length - 1; b >= 0; b--) {
    if (finlOutPut[b] != "dontAddBigSufix") {
        finlOutPut[b] = finlOutPut[b] + bigNumArry[bigScalCntr]; // <<<
        bigScalCntr++;
    }
    else {
        //replace the string at finlOP[b] from "dontAddBigSufix" to empty String.
        finlOutPut[b] = ' ';
        bigScalCntr++; //advance the counter  
    }
}

    //convert The output Arry to , more printable string 
    var nonzero = false; // <<<
    for(n = 0; n<finlOutPut.length; n++){
        if (finlOutPut[n] != ' ') { // <<<
            if (nonzero) output += ' , '; // <<<
            nonzero = true; // <<<
        } // <<<
        output +=finlOutPut[n];
    }


 类似资料:
  • 问题内容: 如何在JavaScript中执行以下操作? 将“ 1”,“ 2”,“ 3”连接为“ 123” 将“ 123”转换为123 加123 + 100 = 223 将223转换为“ 223” 问题答案: 您想熟悉和。 在您的工具箱中有用的是查看变量以找出它是什么类型的:

  • 本文向大家介绍使用JavaScript从数字反转数字数组,包括了使用JavaScript从数字反转数字数组的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个带数字的JavaScript函数。我们的函数应该首先反转数字,然后将反转的数字拆分为数字,然后返回该拆分的数字数组。 输入 输出 因为反向编号是7654321 示例 以下是代码- 输出结果

  • 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100

  • 罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,

  • 问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo

  • 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽