0

私は6つの入力を取るフォームを持っています(もっとありますが、今のところこれらだけが重要です)

元の運賃

原税

新運賃

新税

費用

客数

  1. 「計算」を押すと、javascript を使用して元の運賃と元の税金を加算し、元の合計を取得します

  2. 次に、新しい運賃と新しい税金を追加して、新しい合計を取得します

  3. 、元の合計と新しい合計を比較します

  4. 元の合計が新しい合計よりも大きい場合は、必要な計算を終了し、結果をディスプレイに設定するためにいくつかの方法を使用する必要があります

私はもともとこれらの値を使用してすべてをテストしていました:

元の運賃 = 1000 元の税金 = 200

新運賃 = 800 新税 = 200

料金=150名 人数=3名

ここで見ることができますhttps://pnrbuilder.com/_popups/exchangeMyPNR_MATH_TEST_2.php (ページはchromeでのみ機能します) 上記は期待どおりに機能しますが、値を次のように変更すると:

元の運賃 = 949.83 元の税金 = 321.18

新運賃 = 453.91 新税 = 143.91

料金=150名 人数=3名

ここで見られるhttps://pnrbuilder.com/_popups/exchangeMyPNR_MATH_TEST.php (ページは chrome でのみ機能します) このテストでは、間違った if ステートメントを使用して残りの数学を完成させています

元の合計がまだ > 新しい合計であるため、最初の例と同じ方法を使用する必要があるため、これが発生する理由がわかりません。どの if ステートメントが計算に使用されているかを正確に知らせるためにアラートを設定しましたが、ここでは明らかに間違ったステートメントが使用されていますが、その理由がわかりません。

これが複雑であることはわかっていますが、誰かが私の論理がどこで間違っているかを理解するのを手伝ってくれませんか?


完全な機能は次のとおりです。

function addMe(frm) {
    var orBase = Number(frm.box1.value);
    var orTax = Number(frm.box2.value);
    var nwBase = Number(frm.box3.value);
    var nwTax = Number(frm.box4.value);
    var fee = Number(frm.fee.value);
    var gsts = Number(frm.guests.value);


    var fltrd_orBase = orBase * 100;
    var fltrd_orTax = orTax * 100;
    var fltrd_orTtl = fltrd_orBase + fltrd_orTax;
    var orTtl = fltrd_orTtl / 100;
    var final_orTtl = orTtl.toFixed(2)
    frm.result.value = orTtl.toFixed(2)

    var fltrd_nwBase = nwBase * 100;
    var fltrd_nwTax = nwTax * 100;
    var fltrd_nwTtl = fltrd_nwBase + fltrd_nwTax;
    var nwTtl = fltrd_nwTtl / 100;
    var final_nwTtl = nwTtl.toFixed(2)
    frm.result2.value = nwTtl.toFixed(2)

    var e = document.getElementById("residual");
    var selectVal = e.options[e.selectedIndex].value;



    if (final_orTtl <= final_nwTtl) {

        document.getElementById("forfeitTable").style.display="none";
        document.getElementById("MCOtable").style.display="none";       

        var undiff = final_nwTtl - final_orTtl;
        var diff =undiff
        document.getElementById("differenceDisplay").innerHTML=diff.toFixed(2);
        frm.difference.value = diff.toFixed(2);

        var ppCost = diff + fee;
        frm.pptotal.value = ppCost.toFixed(2);
        document.getElementById("ppDisplay").innerHTML=ppCost.toFixed(2);

        var ttlCost = ppCost * gsts;
        frm.totalcost.value = ttlCost.toFixed(2);
        document.getElementById("grandTotalDisplay").innerHTML=ttlCost.toFixed(2);              

        // this is just for testing to show which method was actually used
        if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                    // this is in its own if statement so it doesnt popuop while entering data
                    alert('if 1 was used');
                }       

    }


    else if (final_orTtl > final_nwTtl) {



          if (selectVal == "residualX" || selectVal == "residualN") {

              document.getElementById("MCOtable").style.display="none";
              var diff = final_orTtl - final_nwTtl;

              var displayDiff = diff* -1;
              document.getElementById("differenceDisplay").innerHTML= displayDiff.toFixed(2);
              frm.difference.value = displayDiff.toFixed(2);




              document.getElementById("forfeitInfo").innerHTML = "Beyond the cost above";
              frm.lost.value = diff.toFixed(2);
              document.getElementById("ppForfeitedDisplay").innerHTML = diff.toFixed(2);

              var ttlfForfeited = diff * gsts;
              frm.lostTTL.value = ttlfForfeited.toFixed(2);
              document.getElementById("totalForfeitedDisplay").innerHTML=ttlfForfeited.toFixed(2);



              var ppCost = fee;
              frm.pptotal.value = ppCost.toFixed(2);
              document.getElementById("ppDisplay").innerHTML=ppCost;

              var ttlCost = fee * gsts;
              frm.totalcost.value = ttlCost.toFixed(2);
              document.getElementById("grandTotalDisplay").innerHTML=ttlCost;

                if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                    document.getElementById("forfeitTable").style.display="table";
                }
                // this is just for testing to show which method was actually used 
                if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                    // this is in its own if statement so it doesnt popuop while entering data
                    alert('if 2.1 was used');
                }
          }

          // this is the method that should be used below
          else if (selectVal == "residualA" ) {

              document.getElementById("MCOtable").style.display="none";
              var diff = final_orTtl - final_nwTtl;

              var displayDiff = diff* -1;
              document.getElementById("differenceDisplay").innerHTML= displayDiff.toFixed(2);
              frm.difference.value = diff.toFixed(2);

               if ( diff > fee) {

                    var residual =  diff - fee ;

                    document.getElementById("forfeitInfo").innerHTML = "No additional cost. However,";
                    frm.lost.value = residual.toFixed(2);
                    document.getElementById("ppForfeitedDisplay").innerHTML = residual.toFixed(2);

                    var ttlfForfeited = residual * gsts;
                    frm.lostTTL.value = ttlfForfeited.toFixed(2);
                    document.getElementById("totalForfeitedDisplay").innerHTML=ttlfForfeited.toFixed(2);

                    //document.getElementById("differenceDisplay").innerHTML=0;
                    frm.difference.value = diff;

                    document.getElementById("ppDisplay").innerHTML=0;
                    document.getElementById("grandTotalDisplay").innerHTML=0;

                       if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                          document.getElementById("forfeitTable").style.display="table";
                      }
                      // this is just for testing to show which method was actually used 
                      if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                        // this is in its own if statement so it doesnt popuop while entering data
                        alert('if 2.2 was used');
                      }



                }
              else  {

                    var remBal =  fee - diff ;

                    var ttlcost = remBal * gsts;
                    frm.totalcost.value = ttlcost.toFixed(2);

                    document.getElementById("ppDisplay").innerHTML=remBal.toFixed(2);
                    document.getElementById("grandTotalDisplay").innerHTML=ttlcost.toFixed(2);

                    document.getElementById("forfeitTable").style.display="none";

                      // this is just for testing to show which method was actually used 
                      if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                        // this is in its own if statement so it doesnt popuop while entering data
                        alert('if 2.3 was used');
                      }                  
                 }
          }
          else if (selectVal == "residualM" ) {

              var diff = final_orTtl - final_nwTtl;
              var displayDiff = diff* -1;
              document.getElementById("differenceDisplay").innerHTML= displayDiff.toFixed(2);
              frm.difference.value = displayDiff.toFixed(2);

              if (diff > fee) {   



                  var mco =  diff - fee ;
                  document.getElementById("MCOInfo").innerHTML=mco.toFixed(2);
                  frm.MCOamt.value = mco.toFixed(2);
                  //document.getElementById("differenceDisplay").innerHTML=diff;
                  //frm.difference.value = diff* -1;


                  frm.totalcost.value = 0;

                  document.getElementById("ppDisplay").innerHTML=0;
                  document.getElementById("grandTotalDisplay").innerHTML=0;

                     if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                              document.getElementById("forfeitTable").style.display="none";
                              document.getElementById("MCOtable").style.display="table";
                          }

                                  // this is just for testing to show which method was actually used 
                      if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                        // this is in its own if statement so it doesnt popuop while entering data
                        alert('if 2.4 was used');
                      }
              }
              else {   



                  var remBal =  fee - diff ;

                    var ttlcost = remBal * gsts;
                    frm.totalcost.value = ttlcost.toFixed(2);

                    document.getElementById("ppDisplay").innerHTML=remBal.toFixed(2);
                    document.getElementById("grandTotalDisplay").innerHTML=ttlcost.toFixed(2);

                    document.getElementById("forfeitTable").style.display="none";
                    document.getElementById("MCOtable").style.display="none";
                                          // this is just for testing to show which method was actually used 
                      if (orBase != "" && orTax != "" && nwBase != "" && nwTax != "" && fee != "" && gsts != "") {
                        // this is in its own if statement so it doesnt popuop while entering data
                        alert('if 2.5 was used');
                      }
              }




          }
    }
4

1 に答える 1

0
var nwTtl = fltrd_nwTtl / 100;
var final_orTtl = orTtl.toFixed(2)

var orTtl = fltrd_orTtl / 100;
var final_orTtl = orTtl.toFixed(2)


if (final_orTtl > final_nwTtl )  {

}

この部分は私の問題のようです。ここで行っている if 比較は'.toFixed(2)' 、何らかの理由で上で行ったことが気に入らないようです。私はそれを次のように変更しました:

var nwTtl = fltrd_nwTtl / 100;
var orTtl = fltrd_orTtl / 100;

if (orTtl > nwTtl )  {

}

私はまだ他のすべての機能をテストしていますが、これは今のところ期待どおりに機能しているようです. '.toFixed(2)'を使用すると、明らかに高い値と低い値の 2 つの数値が逆に評価される理由を知りたいと思っています。この質問のその部分への回答を受け入れます

于 2013-02-23T03:49:23.343 に答える