Javascript 乘两个小数

Javascript 乘两个小数,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试添加一个税务字段。我有这个整数工作,但我需要能够输入“.5” 我不知道该怎么解决这个问题,也许是因为伊斯南,但我认为这在这里是可以的 我当前的代码 $(document).ready(function() { calculateSum(); $(".txt").keyup(function() { $(".txt").each(function() { calculateSum(); }); }); })

我正在尝试添加一个税务字段。我有这个整数工作,但我需要能够输入“.5” 我不知道该怎么解决这个问题,也许是因为伊斯南,但我认为这在这里是可以的

我当前的代码

$(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;
} ​

谢谢

税收是以百分比为基础的。执行以下更改:

$("#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。5


更新:(不是真正的更新)当我看到更多答案时,我重复税务字段用法的逻辑错误。税收是全世界范围内的百分比,这意味着问题不仅在于密钥处理,还在于税收价值的使用方式。

税收是基于百分比的。执行以下更改:

$("#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。5

更新:(不是真正的更新)当我看到更多答案时,我重复税务字段用法的逻辑错误。税是全球范围内的百分比,这意味着问题不仅在于密钥处理,还在于税值的使用方式。

发现错误:

$("#tax").keyup(function() {
     $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
});
在这里,您可以使用
parseInt
而不是
parseFloat
解析税收,就像您在函数
getTax
中所做的那样
parseInt(“.5”)
给出NaN。在插入税款后,尝试在
.txt
输入中插入值,当调用
calculateSum
函数时,该功能将起作用

我不明白为什么在按下
#tax
字段中的键时,您会使用与其他字段中正常按键时不同的计算方法。只需使用相同的侦听器函数,或者,如果您想要分割该功能,则调用该函数以显示来自
#tax
键处理程序和
calculateSum
函数的税款

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

请参阅中更好的结构化源代码。未更正计算税金和总额的数学运算。

发现错误:

$("#tax").keyup(function() {
     $('#total1').val(parseInt($(this).val()) * parseInt($('#subtotal').val()));
});
在这里,您可以使用
parseInt
而不是
parseFloat
解析税收,就像您在函数
getTax
中所做的那样
parseInt(“.5”)
给出NaN。在插入税款后,尝试在
.txt
输入中插入值,当调用
calculateSum
函数时,该功能将起作用

我不明白为什么在按下
#tax
字段中的键时,您会使用与其他字段中正常按键时不同的计算方法。只需使用相同的侦听器函数,或者,如果您想要分割该功能,则调用该函数以显示来自
#tax
键处理程序和
calculateSum
函数的税款

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

请参阅中更好的结构化源代码。计算税收和总额的数学公式没有被更正。

试试这个:

  • 将包括函数在内的所有代码放入
    $(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);
});

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

尝试以下方法:

  • 将包括函数在内的所有代码放入
    $(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);
});



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

在哪里遇到
NaN
<代码>!isNaN(“.5”)
为我提供了
true
。适当的缩进可以提高代码的可读性,并使其他人更容易帮助您。您的代码有点凌乱。您添加到“#tax”字段的
keyup
函数是问题所在。您试图为税值@Bergi输入小数点是什么意思@madth3Did您在哪里遇到
NaN
<代码>!isNaN(“.5”)
为我提供了
true
。适当的缩进可以提高代码的可读性,并使其他人更容易帮助您。您的代码有点凌乱。您添加到字段“#tax”中的
keyup
函数就是问题所在。您的意思是@madth3Did您尝试为税值@BergiThanks输入一个小数点,我将在大约30分钟内尝试它。在回答之前,我修改了您的JSFIDLE代码,如上文所述,没有问题。请描述问题。@tman,不,您没有尝试@drdigit所做的。注意他是如何更改
$(“#tax”).keyup
部分的。在tax文本框中键入.5确定是的,我错过了看到。。。我还以为就在这之后发生了如此多的变化,所以在回答之前,我会在大约30个迷你修改的JSFIDLE代码中进行尝试,就像上面所说的,没有问题。请描述问题。@tman,不,您没有尝试@drdigit所做的。注意他是如何更改
$(“#tax”).keyup
部分的。在tax文本框中键入.5确定是的,我错过了看到。。。并认为正是在这之后,我非常希望看到你能用一个好的代码来执行这个功能。我建立在我所知道的基础上!但你的观点似乎是正确的我不确定