Rumah >hujung hadapan web >tutorial js >Mengapakah kod tersebut menukar nombor '190000009' kepada 'seratus sembilan puluh juta' dan bukannya 'seratus sembilan puluh juta sembilan'?

Mengapakah kod tersebut menukar nombor '190000009' kepada 'seratus sembilan puluh juta' dan bukannya 'seratus sembilan puluh juta sembilan'?

Barbara Streisand
Barbara Streisandasal
2024-11-21 02:01:13771semak imbas

Why does the code incorrectly convert the number

Nombor JavaScript kepada Perkataan

Soalan:
Saya cuba menukar nombor kepada perkataan Inggeris, seperti sebagai 1234 menjadi "seribu dua ratus tiga puluh empat." Fungsi saya berfungsi dengan baik untuk kebanyakan nombor, tetapi untuk nombor seperti 190000009, ia bertukar kepada "seratus sembilan puluh juta" dengan tidak betul. Bolehkah anda mengenal pasti pepijat dan menerangkan mengapa ia berlaku?

Jawapan:

Kod yang disediakan mengendalikan kebanyakan nombor dengan betul, tetapi ia gagal mengambil kira kehadiran sifar selepas bukan sifar digit. Dalam kes 190000009, apabila menukar kumpulan digit "0000," fungsi triConvert mengembalikan "dontAddBigSuffix" kerana semua sifar hadir. Akibatnya, pemformatan seterusnya melangkau menambah "juta" pada kumpulan itu.

Penyelesaian:

Untuk membetulkannya, kod harus menyemak sama ada digit terakhir bagi kumpulan semasa bukan sifar sebelum menandakan kumpulan sebagai "dontAddBigSuffix." Kod yang diubah suai di bawah membetulkan isu ini:

...
if (num == 0) {
    return 'dontAddBigSufix';
}
else if (numString.charAt(numString.length - 1) == 0) {
    return 'dontAddBigSuffix';
}
...

Kod Penuh dengan Pengubahsuaian:

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 if (finlOutPut[b] == "dontAddBigSuffix" && finlOutPut[b-1] != "dontAddBigSuffix") {
            //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';
    }
    else if (numString.charAt(numString.length - 1) == 0) {
        return 'dontAddBigSuffix';
    }
    //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;
}   

Atas ialah kandungan terperinci Mengapakah kod tersebut menukar nombor '190000009' kepada 'seratus sembilan puluh juta' dan bukannya 'seratus sembilan puluh juta sembilan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn