2017-11-25 8 views
0

私は短期のスクリプトを作成して、金額(プリンシパル)の合計金額を特定の金利毎年末の年間利益から税金を差し引いて、望ましい合計を返します。その後、合計は、所望の合計に達するかまたはそれを超えるまで、同じ金利で完全に再投資される。スクリプトは、希望の合計に達するのに必要な年数を返します。Javascriptプログラムが入力フィールドから値を取得できないifステートメントが奇妙な結果を返す

プリンシパルがすでに希望の合計と等しいか、それよりも優れている場合は、投資は不要なので「0」を返します。

機能自体が(数学の一部がない問題です)うまく動作しますが、私は量を手動で入力することができるように入力フィールドを設定しようとすると、何も動作し、私のブラウザがクラッシュした...

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
Principal: <input type="number" id="pri" value="1000"><br> 
 
Interest: <input type="number" id="int" value="0.05"><br> 
 
Tax: <input type="number" id="tax" value="0.18"><br> 
 
Desired: <input type="number" id="des" value="1100"><br> 
 

 
<button onclick= "calculateYears()">Return Years</button> 
 

 
<p id= "test"></p> 
 

 
<script> 
 
function calculateYears(principal, interest, tax, desired) { 
 
    \t var years = 0; 
 
    \t principal = document.getElementById("pri").value; 
 
    \t interest = document.getElementById("int").value; 
 
    \t tax = document.getElementById("tax").value; 
 
    \t desired = document.getElementById("des").value; 
 
    
 
    \t if (principal < desired) { 
 
    \t  do { 
 
    \t   var first = principal * interest; 
 
    \t   var second = principal * interest * tax; 
 
    \t   var net = first - second; 
 
    \t   principal += net; 
 
    \t   years ++; 
 
    \t  } 
 
    \t  while (principal < desired); 
 
    \t  document.getElementById("test").innerHTML += years + "<br>"; 
 
    \t } else { 
 
    \t  document.getElementById("test").innerHTML += years + "<br>";  \t \t 
 
    \t } \t \t \t \t 
 
} 
 

 
</script> 
 

 
</body> 
 
</html>

Iは「」(空のフィールド)に各値を設定し、それらを手動で入力し、変数名を置き換える構造を変え、ループの他のタイプを使用して、コードを簡素化し、それが理解する分析しようとしました何がうまくいかない。

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
Principal: <input type="number" id="pri" value="999"><br> 
 
Desired: <input type="number" id="des" value="1100"><br> 
 

 
<button onclick= "calculateYears()">Return Years</button> 
 

 
<p id= "test"></p> 
 

 
<script> 
 
function calculateYears(numberOne, numberTwo) { 
 
    numberOne = document.getElementById("pri").value; 
 
    numberTwo = document.getElementById("des").value; 
 
    
 
    if (numberOne < numberTwo) { 
 
\t  document.getElementById("test").innerHTML = numberOne; 
 
    } else { 
 
\t  document.getElementById("test").innerHTML = numberTwo; \t 
 
    } \t \t \t \t 
 
} 
 
</script> 
 

 
</body> 
 
</html>

上記のコードは、何らかの形で動作します(それがクラッシュして何かを返していない)ではなく、正しくすべてのケースについて:私はこれに降りました。たとえば、numberOneが "999"に設定され、numberTwoが "1100"に設定されている場合、 "1100"が返されます(numberOne < numberTwo、したがって( "test")innerHTML = numberOne)。

私は何が起こっているのか、私は自分自身をもっと助けるために使うことができるリソースを理解していません。私が間違っているとあなたに教えてくれませんか?

+0

明快にするためのちょっとしたヒント:あなたの関数から引数を取り除いてください。あなたは何も渡していません。あるいは、関数内のdomから引き離すのではなく、実際にパラメータとして渡してください。 – Faust

+0

"関数から引数を削除する" 引数を渡すためにコードを書き直すにはどうすればよいですか?私はまだそれがいかに働くかの流れを完全には得られない。 「パラメータとして値を渡す」 私に例を教えてください。 – Octavio

+0

あなたのhtmlコードは適切にタグを閉じることができません。良いコードは常にトラブルシューティングを単純にしてください。/>とbrで入力を閉じてください。私もいつも名前を入れていますが、それはオプションですと思います。 別のポイント:どのブラウザ(JSエンジン)とバージョンを使用していますか? –

答えて

0

あなたの値はすべて文字列であり、すべてを正しく動作させるには数値である必要があります。

の代わりに:これは浮動小数点数に文字列を変換すると、あなたの数学のすべてが正常に動作するはず

numberOne = parseFloat(document.getElementById("pri").value); 

numberOne = document.getElementById("pri").value; 

あなたはこのようなものが必要。

+0

驚くばかり!できます! 数値を渡す唯一の方法は "parseFloat()"を追加することですか?私は、HTMLにtype = "number"を追加すると、プログラムが数値を認識できるようになると思っていました。 – Octavio

+1

'parseFloat(src:string)'と 'parseInt(src:string、radix:int)'は文字列を数値に変換する通常の方法です。しかし、あなたは 'Number(src)'を使うこともできます。 'type =" number "はユーザが入力できるものだけを制限しますが、' .value'はまだ文字列です。 – Intervalia

関連する問題