0

这是我的代码:

<script type = "text/javascript" >
    var apple_price = 5;
    var banana_price = 10;
    var orange_price = 15;

    function apple_subtotal (num_apple) //returns the cost of apples:
    {
        if (num_apple > 5 ) {
            return apple_price * num_apple * 0.9;
        } else {
            return apple_price * num_appl;
        }
    }

    function banana_subtotal (num_banana) //returns the cost of bananas:
    {
        if (num_banana > 5 ) {
            return banana_price * num_banana * 0.9;
        } else {
            return banana_price * num_banana;
        }
    }

    function orange_subtotal (num_orange) // Returns the cost of oranges:
    {
        if (num_orange > 5 ) {
            return orange_price * num_orange * 0.9;
        } else {
            return orange_price * num_orange;
        }
    }

    function grand_subtotal(num_apple, num_banana, num_orange) // returns the total cost of all items combined:
    {
        var a = apple_subtotal(num_apple);
        var b = banana_subtotal(num_banana);
        var c = orange_subtotal(num_orange);
        var d = num_apple + num_banana + num_orange;

        if (d > 10 ) {
            return (a + b + c) * 1.07 * 0.95;
        } else {
            return (a + b + c) * 1.07;
        }
    }
</script>

<form action="">
 Number of Apples: <input type="text"  name="apples" size="3"  /></br> <!-- Variable for    number of apples -->
 Number of Bananas: <input type="text"  name="bananas" size="3"  /></br> <!-- Variable for number of bananas -->
 Number of Oranges: <input type="text"  name="oranges" size="3" /></br> <!-- Variable for number of oranges -->
 <input type="button" value="total" onclick="document.forms[0].grand_total.value =   grand_subtotal(document.forms[0].apples.value, document.forms[0].bananas.value, document.forms[0].oranges.value)" /></br>         <!-- Button to calculate the grand total -->
Grand Total: $<input type="text" name="grand_total" /> <!-- Grand total display -->
</form>

基本上,我正在编写的代码是针对我所在班级的假装在线商店。如果您订购超过 10 件商品,您将获得 5% 的折扣。我的问题是我无法正确计算总数,而是始终应用​​折扣,无论购买的金额是多少。有没有办法提取表单部分中的信息并将其调用到进行计算的总小计部分?

4

2 回答 2

0

在您的帖子中,您说“如果您订购超过 10 件商品,您将获得 5% 的折扣”,但在代码中您有:

if (num_apple > 5 ) {
  return apple_price * num_apple * 0.9;
}

所以你给予超过 5 件商品的折扣,而不是 10 件,并且给予 10% 的折扣,而不是 5%。您可以使用以下方法简化此代码:

function apple_subtotal (num_apple) {
  return apple_price * num_apple * (num_apple > 10? 0.95 : 1);
}

但这会将 10% 的折扣应用于整个订单,而不仅仅是超过 10 个的订单(也许这就是你想要的,也许不是)。

另一个问题是表单值总是字符串,所以当你这样做时:

var d = num_apple + num_banana + num_orange;

您正在连接这些值,而不是添加它们。因此,如果有人订购 1 个苹果、0 个香蕉和 0 个橙子,那么您有:

var d = '1' + '0' + '0';  // '100'

要使+运算符进行加法而不是串联,请将它们全部设为数字。一些选项:

var d = +num_apple + +num_banana + +num_orange;

var d = Number(num_apple) + Number(num_banana) + Number(num_orange);

var d = parseInt(num_apple, 10) + parseInt(num_banana, 10) + parseInt(num_orange, 10);

您在其他功能中没有这个问题,因为它们不做加法。使用减法、除法和乘法运算符,参数首先转换为数字(如果可以的话),即使它们是字符串。

此外,您在哪里拥有:

<input type="button" value="total" onclick="document.forms[0].grand_total.value =   grand_subtotal(document.forms[0].apples.value, document.forms[0].bananas.value, document.forms[0].oranges.value)">

请注意,表单控件有一个表单属性,该属性引用它们所在的表单,因此:

<input type="button" value="total" onclick="
  this.form.grand_total.value = grand_subtotal(this.form.apples.value, this.form.bananas.value, this.form.oranges.value)">

但是在一个单独的函数中,而不是一个内嵌的监听器,这一切会更好。

于 2013-10-31T06:11:37.010 回答
0

你可以试试这个:

只需将您的 grand_subtotal 函数替换为:

function grand_subtotal(num_apple, num_banana, num_orange) // returns the total cost of       all items combined:
    {
        var a = apple_subtotal(+num_apple);
        var b = banana_subtotal(+num_banana);
        var c = orange_subtotal(+num_orange);
        alert(c);
        var d = (+num_apple) + (+num_banana) + (+num_orange);
        if (d > 10) {
            return (a + b + c) * 1.07 * 0.95;
        }
        else {
            return (a + b + c) * 1.07;
        }
    }
于 2013-10-31T06:18:47.347 回答