ホームページ > ウェブフロントエンド > jsチュートリアル > コードが数値「190000009」を「1900万9」ではなく「19000万」に誤って変換するのはなぜですか?

コードが数値「190000009」を「1900万9」ではなく「19000万」に誤って変換するのはなぜですか?

Barbara Streisand
リリース: 2024-11-21 02:01:13
オリジナル
769 人が閲覧しました

Why does the code incorrectly convert the number

JavaScript の数字から単語へ

質問:
数字を英語の単語に変換しようとしています。 1234 が「1,234」になります。私の関数はほとんどの数値に対してうまく機能しますが、190000009 のような数値の場合、「1 億 9,000 万」に誤って変換されます。バグを特定し、その発生理由を説明できますか?

回答:

提供されたコードはほとんどの数値を正しく処理しますが、その後のゼロの存在を考慮できません。ゼロ以外の数字。 190000009 の場合、数字のグループ「0000」を変換すると、すべてゼロが存在するため、triConvert 関数は「dontAddBigSuffix」を返します。その結果、後続の書式設定では、そのグループへの "million" の追加がスキップされます。

解決策:

これを修正するには、コードで、現在のグループは、グループを「dontAddBigSuffix」としてマークする前はゼロ以外です。以下の変更されたコードは、この問題を修正します:

...
if (num == 0) {
    return 'dontAddBigSufix';
}
else if (numString.charAt(numString.length - 1) == 0) {
    return 'dontAddBigSuffix';
}
...
ログイン後にコピー

変更を含む完全なコード:

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;
}   
ログイン後にコピー

以上がコードが数値「190000009」を「1900万9」ではなく「19000万」に誤って変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート