JS计算问题

时间:2016-08-27 17:22:18

标签: javascript jquery html

我有一个简单的增值税计算器,但有一个有趣的计算方法。问题出在最后一栏,妈妈说。 e = a + d * 0.25是正确的,但下面的代码不是。它在计算时显示的数字过大。

JS代码:

$(document).ready(function() {

$('#submit').click(function() {
    //get cost and check value
    var cost = $('#cost').val();
    var check = $('#checkBox');

    if (cost != null && cost != "") {
        if (cost < 350) {
            //c = a * 1
            $('#total').val(cost);
            $('#toll').val("");
            $('#moms').val("");
        } else {
            if (check.is(':checked')) {
                //c = a* 1.107* 1.25
                $('#total').val((cost * 1.107 * 1.25).toFixed(2));
                //d = a * 0.107
                $('#toll').val((cost * 0.107).toFixed(2));
            } else {
                $('#total').val((cost * 1.25).toFixed(2));
                $('#toll').val("");
                $('#moms').val("");
            }
            if ($('#toll').val() != null && $('#toll').val() != "") {
                //e = (a + d) * 0.25
                var moms = (cost + $('#toll').val()) * 0.25;
                $('#moms').val(moms.toFixed(2));
            }
        }

    }
})

});

1 个答案:

答案 0 :(得分:3)

输入元素的值始终为字符串。在您的大部分代码中,您都在使用&#34;费用&#34;以这种方式将值隐式转换为数字。但是,+运算符是不同的,并且优先执行字符串连接以添加。

如果您在初始化时明确强制成本为数字,那么事情应该会更好:

var cost = +$('#cost').val();

前导一元+运算符将强制将字符串值视为数字。现在,当然,如果字符串看起来不是一个好的数字,那么cost将被设置为NaN,所以你应该检查一下:

if (!isNaN(cost)) {

这可以替换您当前的支票,以查看cost是否为空。

编辑抱歉,您还需要转换$('#toll').val()的值,以便该行看起来像:

            var moms = (cost + +$('#toll').val()) * 0.25;

JavaScript +运算符非常喜欢字符串。