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;
}

つまり、10 ではなく 5 を超えるアイテムに対して割引を提供し、5% ではなく 10% の割引を提供しています。以下を使用して、このコードを簡略化できます。

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

しかし、それは 10% を超える注文だけでなく、注文全体に 10% の割引を適用します (それはあなたが望むものかもしれませんし、そうでないかもしれません)。

もう 1 つの問題は、フォームの値が常に文字列であることです。

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 に答える