-7

我正在尝试构建一个电气单位计算器。我已经开发了一个,但我对我的代码不满意。我在这里问你们有没有其他方法来开发这个计算器。

以下是我的代码:

HTML

<input name="" type="text" value="" onblur="check()" id="bill" />

脚本

<script>
    function check()
    {
    var a=0,b=0,c=0;
    var tot = 0;
    var tot1=0;
    var tot2=0;
    var tot3=0;

    var a = document.getElementById('bill').value;

    if(a>200)
    {
        b = a - 200;
        alert('b is: '+b);
        if(b>200)
        {
        c= b-200;
        alert('c is: '+c);
        tot1 = 200*4;
        tot2 = 200*5;
        tot3 = c*6;
        tot = tot1 + tot2 + tot3;
        alert(tot);
        }
        else
        {

        tot1 = 200*4;
        tot2 = b*5;
        tot3 = c*6;
        tot = tot1 + tot2 + tot3;
        alert(tot);

        }
    }
    else
    {
        tot = a*4;
        alert(tot);

    }
    }

</script>

请朋友帮帮我..:)

4

5 回答 5

2

您的代码需要分开 - 注释也有助于帮助其他人理解您的代码的用途。这是一个工作示例:

function check() 
{   var initialRate = 4; // electricity charged at this rate below 200
    var standardRate = 5; // amount of electricity between 200 and 400 charged at this rate
    var overageRate = 6; // the part of electricity usage over 400 at this rate
    var electricityUsage = +document.getElementById('bill').value; // convert String to Number

    if (isFinite(electricityUsage) || electricityUsage < 0) {
        alert('The number entered was invalid, or was less than 0.');
        return;
    }

    // calculates the total
    alert(
        electricityUsage > 400
        ? initialRate * 200 + standardRate * 200 + overageRate * (electricityUsage - 400)
        : electricityUsage > 200
            ? initialRate * 200 + standardRate * (electricityUsage - 200)
            : initialRate * electricityUsage
    );
}
于 2013-03-11T10:57:04.273 回答
2
<script>
     function check()
    {
    var a=0,b=0,c=0;
    var tot = 0;
    var tot1=0;
    var tot2=0;
    var tot3=0;

    var a = parseFloat(document.getElementById('bill').value);

    if(a>200)
    {
        tot1 = 200*4;
        b = a - 200;
        alert('b is: '+b);
        if(b>200)
        {
        c= b-200;
        alert('c is: '+c);
        tot2 = 200*5;
        tot3 = c*6;
        tot = tot1 + tot2 + tot3;
        alert(tot);
        }
        else
        {

        tot1 = 200*4;
        tot2 = b*5;
        tot3 = c*6;
        tot = tot1 + tot2 + tot3;
        alert(tot);

        }
    }
    else
    {
        tot = a*4;
        alert(tot);

    }
    }
</script>
<input name="" type="text" value="" onblur="check()" id="bill" />

我认为这会做:)

于 2013-03-11T10:39:18.167 回答
1

我想我终于有了。有三个电荷带,您需要知道每个带中值的哪一部分。然后,您需要对每个波段中的金额应用适当的乘数。

如果我是对的,那么代码非常简单:

function check() {
    var a = Number(document.getElementById('bill').value);
    var n = 200;
    var tot1 = Math.min(n, a);
    a = a - n;
    var tot2 = Math.max(0, Math.min(n, a));
    a = a - n;
    var tot3 = Math.max(0, a);
    return tot1 * 4 + tot2 * 5 + tot3 * 6;
}

如果有更多的波段,那么我们会在一个循环中进行计算,但对于三个波段来说这已经足够了。

注意:该函数返回计算的总数。

于 2013-03-11T11:32:50.270 回答
1

尝试这个:

function check()
{
    // Algorithm
    // Slabs : 200 | 400 | ...
    // Amoun :  4  |  5  |  6

    slabs = [200, 400]
    rate = [4, 5, 6]

    var total = document.getElementById('bill').value;

    // Over the head
    if (total > slabs[1]) {
        amount = slabs[0] * rate[0] + (slabs[1] - slabs[0]) * rate[1] + (total - slabs[1]) * rate[2];
    } else if (total > slabs[0]) {
        amount = slabs[0] * rate[0] + (total - slabs[0]) * rate[1];
    } else {
        amount = total * rate[0];
    }

    alert("Total charge: " + amount);
}
于 2013-03-11T10:41:36.323 回答
0

看到这个:样本

function check()
{
    var tot = 0,tot1=0,tot2=0,tot3=0;
    var a = document.getElementById('bill').value;
    tot1 = (a<=200) ? (a * 4) : 800;
    tot2 = (a<=400) ? ((a-200) * 5): 1000;
    tot3 = (a-400) > 0 ? ((a-400) * 6): 0;
    tot = tot1 + tot2 + tot3;
    var msg = "Total Charge: "+tot+"\n Details\n < 200        : "+tot1;
        msg += (tot2 != 0) ? "\n200 to 400 : "+tot2 : "";
        msg += (tot3 != 0) ? "\n>400          : "+ tot3 : "";
    alert(msg);
}
于 2013-03-11T11:26:23.230 回答