0

JavaScript を使用して値を合計するフォームがあります。セントを含む通貨値を入力するまでは正常に機能するため、$2.99 の値は合計で 2.00 しか表示されません。ここに私のjsFiddle http://jsfiddle.net/vegas/JwFCB/があります

    function multiplyRow(row) {

    var this_qty = row + "_value1"
    var this_price = row + "_value2"
    var this_extend = "extend" + row;
    document.getElementById(this_extend).value = (parseInt(document.getElementById(this_qty).value) * parseInt(document.getElementById(this_price).value)) || 0;
    summate();

}

function rateRow(row) {
    var this_payrate = "payrate" + row;
    var this_hours = "hours" + row;
    var this_subtot = "subtotal" + row;
    document.getElementById(this_subtot).value = (parseInt(document.getElementById(this_payrate).value) * parseInt(document.getElementById(this_hours).value)) || 0;
    getlabor();

}

function summate() {
    var materialcost = 0
    for (var i = 1; i <= 5; i++) {
        var id = "extend" + i;
        var thisVal = parseInt(document.getElementById(id).value, 10) || 0;
        materialcost += thisVal;
    }
    document.getElementById("materialcost").value = materialcost || 0;
    tax();
    grandTotal();
}

function getlabor() {
    var labortotal = 0
    var hourCounter = 0
    for (var i = 1; i <= 5; i++) {
        var id = "subtotal" + i;
        var idHours = "hours" + i;
        var thisVal = parseInt(document.getElementById(id).value, 10) || 0;
        var thisValHours = parseInt(document.getElementById(idHours).value, 10) || 0;
        labortotal += thisVal;
        hourCounter += thisValHours;

    }
    document.getElementById("labortotal").value = labortotal || 0;
    document.getElementById("totalhours").value = hourCounter || 0;
    grandTotal();

}

function tax() {
    var materialcost = document.getElementById('materialcost').value || 0;
    var shipping = document.getElementById('shipping').value || 0;
    var salestax = (Math.round(((materialcost / 100) * 8.1) * 100) / 100) || 0;
    var materialtotal = ((materialcost * 1) + (salestax * 1) + (shipping * 1)) || 0;

    document.getElementById('materialcost').value = materialcost;
    document.getElementById('salestax').value = salestax;
    document.getElementById('shipping').value = shipping;
    document.getElementById('materialtotal').value = materialtotal;
    grandTotal();


}

function grandTotal() {
    var labor = parseInt(document.getElementById("labortotal").value, 10) || 0;
    var material = parseFloat(document.getElementById("materialtotal").value, 10) || 0;
    document.getElementById('grandtotal').value = (labor + material).toFixed(2);
}
4

2 に答える 2

2

小数値は整数としてのみ表示されます

parseInt次に、使用しないでくださいparseFloat

于 2013-06-02T22:48:46.800 に答える
1

ただのコメント:

文字列を使用した数学は、オーバーロードされた「+」演算子を使用している場合にのみ問題になります。計算では、次を使用できます。

document.getElementById(this_extend).value = document.getElementById(this_qty).value) * document.getElementById(this_price).value;

parseInt と parseFloat の唯一の利点は、末尾の数字以外の値を削除することです。計算で使用する前に、ユーザー入力を検証する必要があります。

于 2013-06-02T23:07:12.370 に答える