質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.93%

割引を適用した実際のお支払旅行代金を表示するフォームのプログラムを完成させたいです。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 330

前提・実現したいこと

最終的に購入者が支払う旅行代金を算出したいです。
ただ算出に当たっては、1泊当たり20,000円を上限に、代金の2分の1に相当する金額が割引となります。

例 
1泊2日 旅行代金50,000円の場合、半額は25,000円ですが、上限が20000円なので
旅行代金の支払額は30,000円


2泊3日 旅行代金50,000円の場合、半額は25,000円、上限が20000円X2泊=40,000円なので、旅行代金の支払額は25,000円

発生している問題・エラーメッセージ

1泊当たりのおひとり様代金X泊数で通常の旅行代金の算出はできたのですが、
旅行代金の半額に対し、1泊当たりの上限の範囲内で、割引を適用するコードを書くことができず、お支払額を算出できないでいます。

該当のソースコード

<div class="sample_wrap">
<h1 class="sample_h1">GO TO TRAVELいくら割引されるの?</h1>
<p class="sample_p">旅行代金合計と泊数入力してください</p>
<form name="daikin" class="sample_form" method="post" action="">
<table class="sample_table">
<tbody><tr>
<!--旅行単価を表示-->       
<th class="sample_th"> <label for="textForm1">単価: </label></th>
<td class="sample_td"><input type="text" id="textForm1" class="sample_input">
円</td>
</tr>
<tr>
<!--泊数を表示--> 
<th class="sample_th"> <label for="textForm2">泊数: </label></th>
<!-- <input type="text" id="textForm2">-->
<td class="sample_td">
<select name="term" id="textForm2" class="sample_input">
<option value="1" selected>1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>

</td>
</tr>
<tr> 

<!--通常の旅行代金を表示-->
<th class="sample_th"> <label for="resultForm">通常の旅行代金: </label></th>
<td class="sample_td"><input type="text" id="resultForm" class="sample_input">円</td>
</tr>

<tr> 

<!--割引額を表示-->
<th class="sample_th"> <label for="textForm3">割引額: </label></th>
<td class="sample_td"><input type="text" id="textForm3" class="sample_input">円</td>
</tr>
<tr> 

<!--お支払いの旅行代金を表示-->
<th class="sample_th"> <label for="resultForm2">お支払旅行代金: </label></th>
<td class="sample_td"><input type="text" id="resultForm2" class="sample_input">円 </td>
</tr>

</tbody>
</table>
<button type="button" id="button">計算</button>
<button type="button" id="clear" onclick="formReset()">リセット</button>
</form>
</div>

</body>

<!--******************************************
jsの起動エリア
******************************************-->
<script>

// ボタンの要素を取得
var button = document.getElementById("button");

// ボタンをクリックした時の処理
button.addEventListener("click", function(e) {

e.preventDefault();

// 2つの入力フォームの値を取得
var textForm1 = document.getElementById("textForm1").value;
var textForm2 = document.getElementById("textForm2").value;

// 2つの数値を乗じる
var sum = parseInt(textForm1, 10) * parseInt(textForm2, 10) ;
// var sum = textForm1 + textForm2;
// 通常の代金を別の入力フォームに表示
var resultForm = document.getElementById("resultForm");

resultForm.value = sum;

});

//フォームの入力内容のリセット 
function formReset() {
document.daikin.reset();

</script>

試したこと

javascriptでトライしたのですが(もともと浅薄な知識)、
第一次的に通常の旅行代金までは語.付けたのですが、割引額の算出と最終的にお客様が支払う金額をフォームに表示するに至りませんでした。

補足情報(FW/ツールのバージョンなど)

1.先ず、通常の旅行代金を算出
2.通常代金の半額を算出
3.半額代金が1泊当たり20000円の上限以内であれば半額のお支払となり、
上限を超える湯であれば、半額ではなく20000円X泊数分の割引となります。

分かりにくい文章で真位恐縮ですがご教示のほどよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Lhankor_Mhy

    2020/06/02 17:37

    結果(実際に起きたこと)を書きましょう
    https://teratail.com/help/question-tips#questionTips3-4-1

    エラーメッセージや実行ログをコピー&ペーストしましょう
    https://teratail.com/help/question-tips#questionTips3-4-2

    3-7. markdownを利用しましょう
    https://teratail.com/help/question-tips#questionTips3-7

    キャンセル

  • gentaro

    2020/06/02 17:40

    なんか「プログラミングで困ってる」というより「算数で困ってる」という質問に見えますが…。
    まずちゃんと計算の過程を仕様として文章に起こせますか?
    具体的な人数別、金額別にありえるパターンと期待する結果を列挙できますか?
    それができるなら、計算式を関数としてコードにそのまま書いて、テストするだけの作業ですよ。

    キャンセル

回答 1

checkベストアンサー

0

>旅行代金の半額に対し、1泊当たりの上限の範囲内で、割引を適用するコード

Math.min()を使うといいかと思います。

Math.min() 静的関数は、引数に渡される最小の値...を返します。
Math.min() - JavaScript | MDN

>1泊2日 旅行代金50,000円の場合、半額は25,000円ですが、上限が20000円なので旅行代金の支払額は30,000円 

50000 - Math.min( 50000 * 0.5, 20000 * 1 )
//30000

>2泊3日 旅行代金50,000円の場合、半額は25,000円、上限が20000円X2泊=40,000円なので、旅行代金の支払額は25,000円

50000 - Math.min( 50000 * 0.5, 20000 * 2 )
//25000

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/06/03 11:20

    お忙しい中、ご教示いただきまして誠にありがとうございました。
    これから、再トライしてみます。
    重ねて御礼申し上げます。
    p.s.
    teratailを初めて利用したため、質問の仕方などの記述表現が悪くご迷惑おかけしました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る