2011-07-01 13 views
1

フィールド2 & 3を追加するだけのスクリプトがありますが、数値を通貨($x,xxx.xx)としてフォーマットしたので、が返されます。計算を行う前に数字から$記号を取り除くことは可能ですか?私はコンマとピリオドが同じ問題を引き起こさないと仮定します。クリックイベントでNaNを取得する

onclick="document.getElementById('field1').value = (Math.round((parseFloat(document.getElementById('field2').value,2)*100))/100 + Math.round((parseFloat(document.getElementById('field3').value,2)*100))/100).toFixed(2);" 

計算]ボタンをクリックする前に、私は(とすぐに、ユーザがフィールドを離れると)onblur="forA();"を追加されている数値をフォーマットしていますと:

function forA() { 
    document.getElementById('fieldY').value = "$" + addCommas1(document.getElementById('fieldZ').value); 
} 

function addCommas1(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 x1 + x2; 
} 
+1

*私はコンマとピリオドは、同じ問題が発生することはありませんと仮定*彼らが行う: '+ "1,234.50" - > NaN' –

+2

TL; DR:変数は、文字列' "$ 123,456.78を" '含まれています。どのようにして番号123456.78を取得するのですか? –

+0

最初にそれらを追加するのではなく、どうして? –

答えて

3

だけで計算を行う前に、すべての非ドット/数字を削除

var currency = "$2,358.88"; 
var number = Number(currency.replace(/[^0-9.]+/g,"")); 
+2

文字クラスで '.'をエスケープする必要はありません。 –

+0

良いキャッチフェリックス...それを削除しました。 –

+0

したがって、私のリテラルの変更は... var currency1 = 'field2'; var number =数値(currency1.replace(/ [^ 0-9。] +/g、 "")); var currency2 = 'field2' ; var number =数値(currency2.replace(/ [^ 0-9。] +/g、 ""));このコードはどこに置くのですか? "onclick"イベントまたはメインのJScriptセクション。助けてくれてありがとう。 – user821522

関連する問題