2017-02-16 54 views
0

我嘗試使用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; 
} 

如果即時通訊做一個計算器即時得到55.65相同的算法,但是當我嘗試使用此功能在某種程度上即時得到。

有人可能知道什麼是問題並告訴我如何解決她?

+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

問題是v1v2v3不是數字。他們是字符串。所以你所做的每個計算都依賴於字符串之間的隱式轉換和操作。

例如,在下面的片段中,我們將字符串值「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的除法。

什麼是解決方案?

你必須要麼使用parseIntparseFloat,像下面來分析這些值:

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

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

+0

試圖做到這一點: –

+0

我建議您添加如何解析值。我可能猜想那個問的人不知道該怎麼做。 –

+1

我只是做了:) – Christos

0

當你得到一個HTMLInputElementvalue財產,你得到的是一個string 。 而且應用於兩個字符串的+運算符僅將它們連接起來,因此如果例如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。所以下面的代碼應工作:

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

你也可以使用parseInt如果您的值中包含任何字母字符。