Heim > Web-Frontend > js-Tutorial > Warum wandelt der Code die Zahl „190000009' fälschlicherweise in „einhundertneunzig Millionen' statt in „einhundertneunzig Millionen neun' um?

Warum wandelt der Code die Zahl „190000009' fälschlicherweise in „einhundertneunzig Millionen' statt in „einhundertneunzig Millionen neun' um?

Barbara Streisand
Freigeben: 2024-11-21 02:01:13
Original
762 Leute haben es durchsucht

Why does the code incorrectly convert the number

JavaScript-Zahlen in Wörter

Frage:
Ich versuche, Zahlen in englische Wörter umzuwandeln, z aus 1234 wird „eintausendzweihundertvierunddreißig“. Meine Funktion funktioniert für die meisten Zahlen gut, aber für Zahlen wie 190000009 wird sie fälschlicherweise in „einhundertneunzig Millionen“ umgewandelt. Können Sie den Fehler identifizieren und erklären, warum er auftritt?

Antwort:

Der bereitgestellte Code verarbeitet die meisten Zahlen korrekt, berücksichtigt jedoch nicht das Vorhandensein von Nullen danach Ziffern ungleich Null. Im Fall von 190000009 gibt die triConvert-Funktion beim Konvertieren der Zifferngruppe „0000“ „dontAddBigSuffix“ zurück, da alle Nullen vorhanden sind. Daher wird bei der nachfolgenden Formatierung das Hinzufügen von „Million“ zu dieser Gruppe übersprungen.

Lösung:

Um dies zu beheben, sollte der Code prüfen, ob die letzte Ziffer der Die aktuelle Gruppe ist ungleich Null, bevor die Gruppe als „dontAddBigSuffix“ markiert wird. Der untenstehende geänderte Code behebt dieses Problem:

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

Vollständiger Code mit Änderung:

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;
}   
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wandelt der Code die Zahl „190000009' fälschlicherweise in „einhundertneunzig Millionen' statt in „einhundertneunzig Millionen neun' um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage