乘以两位小数

时间:2012-07-18 23:22:00

标签: javascript jquery html

我试图添加税收字段。我有这个工作的整数,但我需要能够输入“.5” 我没有线索来解决这个问题,也许是因为isNAN,但我认为这样就好了。

http://jsfiddle.net/thetylercox/eeMva/3/

我当前的代码

$(document).ready(function() {
    calculateSum();
    $(".txt").keyup(function() {
        $(".txt").each(function() {
            calculateSum();
        });
    });
});

$("#tax").keyup(function() {
    $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
);

function calculateSum() {
    var sum = 0;
    $("#sum").val(sum.toFixed(2));
    //iterate through each textboxes and add the values
    $(".txt").each(function() {
        //add only if the value is number
        if (!isNaN(this.value) && this.value.length != 0) {
            sum += parseFloat(this.value);
        }
    });
    $("#sum").html(sum.toFixed(2));
    var subtotal = document.getElementById("subtotal").value == "";
    var subtotal = document.getElementById("subtotal").value = sum;


    function getTax(tax) {
        var taxFloat = parseFloat(tax)
        if (isNaN(taxFloat)) {
            return 1;
        } else {
            return taxFloat;
        }
    }

    var total = getTax($('#tax').val()) * sum;
    var total1 = document.getElementById("total1").value = total;
} ​

谢谢

3 个答案:

答案 0 :(得分:3)

试试这个:

  • 将包含函数的所有代码放在$(document).ready(function(){...})结构中。
  • calculateSum()内执行所有计算,包括税务。
  • 全部使用jQuery,特别是'$(...)'优先于.getelementById(...)
  • calculateSum作为所有用户可输入字段的'keyup'处理程序附加。
  • 清除代码中的各种垃圾

它应该是这样的:

$(document).ready(function(){
    function getTax() {
        var taxFloat = parseFloat($("#tax").val());
        return isNaN(taxFloat) ? 1 : taxFloat;
    }

    function calculateSum() {
        var sum = 0;
        $(".txt").each(function() {
            if (this.value && !isNaN(this.value)) {
                sum += parseFloat(this.value);
            }
        });
        $("#subtotal").val(sum.toFixed(2));
            $("#total1").val((getTax()*sum).toFixed(2));
    }

    $(".txt, #tax").keyup(calculateSum);
});

<强> DEMO

您可能希望将税务算法更改为更符合逻辑的算法。例如。输入值为5(%)时,乘数应为1.05。

答案 1 :(得分:0)

税收基于百分比。进行以下更改:

$("#tax").keyup(function() { 
    //$('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
    calculateSum();
    });

...

function getTax(tax) {
        var taxFloat = parseFloat(tax)
        if (isNaN(taxFloat)) {
            return 1;
        } else {
            // 1(subtotal) + ?(tax%) -> total = (1 + tax%) * subtotal
            return 1 + (taxFloat/100);
        }
    }

    var total = getTax($('#tax').val()) * sum;
    // round to 2 decimal digits
    total = Math.round(total * Math.pow(10, 2)) / Math.pow(10, 2);
    var total1 = document.getElementById("total1").value = total;

因此,对于5%,您输入5表示0.5%,然后输入.5

更新 :(并非真正的更新)当我看到更多答案时,我会重复使用税务字段的逻辑错误。税收是全球的百分比,这意味着问题不仅是关键处理,还包括税收价值的使用方式。

答案 2 :(得分:0)

发现错误:

$("#tax").keyup(function() {
     $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
});

在这里,您使用parseInt代替parseFloat解析税,就像在函数getTax中一样。 parseInt(".5")给了NaN。插入税后,尝试在.txt输入中插入值,并在调用calculateSum函数时起作用。

我无法理解为什么在#tax字段中按键时使用不同的计算而不是在其他字段中使用普通按键时。只需使用相同的侦听器功能,或者,如果要分割功能,请调用该功能以显示#tax密钥处理程序和calculateSum函数的税。

此外,当其中一个输入更新时,无需执行calculateSum()四次。

updated fiddle中查看更好的结构化源代码。计算税金和总数的数学计算没有得到纠正。