gpt4 book ai didi

JavaScript 数字到单词

转载 作者:行者123 更新时间:2023-12-02 21:17:57 26 4
gpt4 key购买 nike

我正在尝试将数字转换为英文单词,例如1234将变成:“一千二百三十四”。

我的策略是这样的:

  • 将数字分成三位,并将它们从右到左放入数组 (finlOutPut)。

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

  • 从右向左添加千、百万、十亿等。如果 finlOutPut 单元格等于 "dontAddBigSufix"(因为它只是零),则不要添加该单词并将单元格设置为 "" (什么也没有)。

它似乎工作得很好,但我在将 190000009 等数字转换为:“一亿九千万”时遇到一些问题。当有几个零时,它会以某种方式“忘记”最后的数字。

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

function update(){
var bigNumArry = new Array('', ' thousand', ' million', ' billion', ' trillion', ' quadrillion', ' quintillion');

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

if (numString == '0') {
document.getElementById('container').innerHTML = 'Zero';
return;
}

if (numString == 0) {
document.getElementById('container').innerHTML = 'messeg tell to enter numbers';
return;
}

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

//cut the number to grups of three digits and add them to the Arry
while (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);
i--;
numString = numString.substring(0, numString.length - 3);
}
finlOutPut.push(numString);
finlOutPut.reverse();

//conver each grup of three digits to english word
//if all digits are zero the triConvert
//function return the string "dontAddBigSufix"
for (j = 0; j < finlOutPut.length; j++) {
finlOutPut[j] = triConvert(parseInt(finlOutPut[j]));
}

var bigScalCntr = 0; //this int mark the million billion trillion... Arry

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];
}

document.getElementById('container').innerHTML = output;//print the output
}

//simple function to convert from numbers to words from 1 to 999
function triConvert(num){
var ones = new Array('', ' one', ' two', ' three', ' four', ' five', ' six', ' seven', ' eight', ' nine', ' ten', ' eleven', ' twelve', ' thirteen', ' fourteen', ' fifteen', ' sixteen', ' seventeen', ' eighteen', ' nineteen');
var tens = new Array('', '', ' twenty', ' thirty', ' forty', ' fifty', ' sixty', ' seventy', ' eighty', ' ninety');
var hundred = ' hundred';
var output = '';
var numString = num.toString();

if (num == 0) {
return 'dontAddBigSufix';
}
//the case of 10, 11, 12 ,13, .... 19
if (num < 20) {
output = ones[num];
return output;
}

//100 and more
if (numString.length == 3) {
output = ones[parseInt(numString.charAt(0))] + hundred;
output += tens[parseInt(numString.charAt(1))];
output += ones[parseInt(numString.charAt(2))];
return output;
}

output += tens[parseInt(numString.charAt(0))];
output += ones[parseInt(numString.charAt(1))];

return output;
}
<input type="text"
id="number"
size="70"
onkeyup="update();"
/*this code prevent non numeric letters*/
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">Here The Numbers Printed</div>

最佳答案

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

但是当你给 JavaScript '009'(或'008')时,这是一个无效的八进制数,所以你会得到零。

如果您浏览了从 190,000,001 到 190,000,010 的整组数字,您会看到 JavaScript 跳过“...,008”和“...,009”,但为“...,009”发出“8”, 010'。这就是“ Eureka !”时刻。

更改:

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 数字到单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com