2016-10-04 5 views
0

私はChart.JSバーチャートのバーの上に値を追加するには、このコードを持っている:この試みをNaNに丸め(javascript)するのはなぜですか?

//ctx.fillText(addCommas(dataset.data[i]), model.x, y_pos); 
ctx.fillText(addCommasRound(dataset.data[i]), model.x, y_pos); 

古いコード(addCommasを使用して())、働いていたなどの「1838204.79」などの値を変更します」 1,838,204.79"

Iはしかし、セント/小数点以下を無視するので、私はこのような代替addCommasRound()メソッドを試みた:

function addCommasRound(nStr) { 
    nStr += ''; 
    x = nStr.split('.'); 
    x1 = x[0]; 
    x2 = x.length > 1 ? '.' + x[1] : ''; 
    var rgx = /(\d+)(\d{3})/; 
    while (rgx.test(x1)) { 
     x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
    } 
    return Math.round(x1 + x2); 
} 

をaddCommas()とaddCommasRound(唯一の違い)が挿入されreturn文にMathRound()を追加します。なぜこの値は "1,838,205"ではなく "NaN"になりますか?

私も最後の行を変更してみました:それは失敗しますが、同じ(「NaNの」)の結果ではない場合だけ見るために...

return Math.round(x1); 

答えて

2

x1x2は数値ではないため(NaNの略)、文字列です。

最初に番号を丸めてから、文字列操作を実行する必要があります。

function addCommasRound(nStr) { 
    nStr = String(Math.round(Number(nStr))); 

JavaScript string and number conversionも参照してください。

2

カンマは数値リテラルでは使用できません。 Math.roundは、パラメータを数値に変換しようとします。

+'1,000'を実行すると、NaNが生成されますが、+'1000'は、1000となります。

戻ってくる番号にカンマを追加する場合は、最初に丸め、、次ににカンマを追加します。 OrangeDogの答えに基づいて

-1

は、私はこの作業を導出思い付いた:

function addCommasRound(nStr) { 
    nStr = String(Math.round(Number(nStr))); 
    x = nStr.split('.'); 
    x1 = x[0]; 
    var rgx = /(\d+)(\d{3})/; 
    while (rgx.test(x1)) { 
     x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
    } 
    return x1; 
} 
関連する問題