2017-02-16 2 views
0

イムイム電卓イム55.65を得ると同じアルゴリズムを行う場合はJavaScriptを使用して、いくつかのアルゴリズム関数を作成し、いくつかの問題にjavascriptで間違った数学アルゴリズム?

function Algorithm() { 
    var endone; 
    var endtwo; 
    var endtheend; 
    var v1 = document.getElementsByName("v1")[0].value; //worth to 91 
    var v2 = document.getElementsByName("v2")[0].value; //worth to 61 
    var v3 = document.getElementsByName("v3")[0].value; //worth to 20 

    endone = Math.round(v1 * 0.30); 

    endtwo = Math.round(((v2 + v3)/2) * 0.70); 

    endtheend = endone + endtwo; 


    document.getElementById("ending").innerHTML = "end : " + endtheend; 
} 

を取得しようとしたが、イムは、この機能を使用しようとすると何とか2169を取得イム

誰かが問題を知っている可能性があり、私に彼女の解決方法を教えてもらえますか?

+1

要素の文字列値を 'parseInt'などの数値に解析する必要があります。 – vcsjones

+0

'v2 =" 61 "; v3 = "20"; v2 + v3 // "6120" ' – Bergi

+1

http://stackoverflow.com/questions/8976627/how-to-add-two-strings-as-if-they-were-numbers – trincot

答えて

2

v1,v2およびv3は数字ではありません。彼らは文字列です。したがって、各計算は暗黙的な変換と文字列間の演算に依存します。

たとえば、次のスニペットでは、文字列値 "91"を二重浮動小数点数に暗黙的に変換してから、通常の多重化が行われます。

下記一方

var v1 = "91"; 
 
console.log(v1*0.3);

var v2 = "61"; 
 
var v3 = "20"; 
 

 
console.log((v2 + v3)/2)

私たちは、文字列の連結を持つ新しい文字列で "61" + "20" 結果 " 6120 "に変換され、暗黙的に" 6120 "が二重浮動小数点に変換され、2で除算が行われます。

解決策は何ですか?

あなたは以下のように、parseIntまたはparseFloatのいずれかを使用して、これらの値を解析する必要があります。あなたはHTMLInputElementvalueプロパティを取得すると

var v2 = "61"; 
 
var v3 = "20"; 
 

 
console.log((parseInt(v2,10) + parseInt(v3,10))/2)

+0

を試してみてください: –

+0

私値を解析する方法を追加することをお勧めします。私は尋ねた人がそうする方法を知らないと推測するかもしれない。 –

+1

私はちょうどそれをしました:) – Christos

0

は、何を得ることはstringです。 +演算子を2つの文字列に適用すると、単に連結されるため、v2 == "7"v3 === "0"の場合は、(v2 + v3)を入力すると"70"となります。

あなたの問題を解決するには、単にparseIntて値を渡すことです:

var v1 = parseInt(document.getElementsByName("v1")[0].value, 10); 
var v2 = parseInt(document.getElementsByName("v2")[0].value, 10); 
var v3 = parseInt(document.getElementsByName("v3")[0].value, 10); 
// The second argument to parseInt isn't needed if you only target newer browsers. 

私はあなたがより多くの情報のためtype coercion in JavaScriptをよく読んでお勧めしたいです。

0

問題はすべてあなたの値(v1、v2、v3)がStringタイプです。最初にNumberに変換する必要があります。だから、次のコードは動作するはずです:あなたの値は任意のアルファベット文字が含まれている場合にもparseIntを使用することができます

function Algorithm() { 
    var endone; 
    var endtwo; 
    var endtheend; 
    var v1 = Number(document.getElementsByName("v1")[0].value); 
    var v2 = Number(document.getElementsByName("v2")[0].value); 
    var v3 = Number(document.getElementsByName("v3")[0].value); 
    endone = Math.round(v1 * 0.30); 
    endtwo = Math.round(((v2 + v3)/2) * 0.70); 
    endtheend = endone + endtwo; 
    document.getElementById("ending").innerHTML = "end : " + endtheend; 
} 

関連する問題