我正在尝试将数字转换为英文单词,例如1234会变成:“ 1,234”。我的战术是这样的:将数字分隔为三,然后从右到左将它们放在数组(finlOutPut)上。将三位数字的每个组(finlOutPut数组中的每个单元格)转换为一个单词(triConvert函数的作用)。如果所有三个数字均为零,请将其转换为"dontAddBigSuffix"从右到左,添加千,百万,十亿等。如果finlOutPut单元格等于"dontAddBigSufix"(因为它只是零),请不要添加单词并将该单元格设置为" "(无)。看来效果不错,但是我遇到了一些问题,例如190000009,转换为:“一亿九千万”。当有几个零时,它将以某种方式“忘记”最后一个数字。我做错了什么?错误在哪里?为什么它不能完美运行? 最佳答案 当前导零数字时,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]; } 10-06 07:37