2012-09-25 38 views
1

我一直在搞亂HTML並操縱SVG。作爲練習,我創建了一個使用javascript解決畢達哥拉斯定理並在300h x 300w區域顯示三角形的頁面。我認爲我的問題是,當變量「a」與變量「b」之間的差異太大時,比較「if(a>b)」無法正常工作。因此,它完全適用於a=55b=32甚至a=5555b=5000但如果我不a=1001b=55似乎運行它彷彿ba更大。任何人都有一個修復與大數字的JavaScript比較?

<h2>Pythagorean theorem</h2> 
<p>Enter Variable "a"<input id="vara" type="text"></p> 
<p>Enter Variable "b"<input id="varb" type="text"></p> 
<p><span id="a">a</span><sup>2</sup> + 
<span id="b">b</span><sup>2</sup> = 
<span id="c">c</span><sup>2</sup></p> 

<script> 
function pythagorean(){ 
var a=document.getElementById("vara").value; 
var b=document.getElementById("varb").value; 
var x=a * a + b * b; 
var c=Math.sqrt(x); 

if(a>b){ 
    ay=0 
bx=b/a*300 
} 
else{ 
ay=300-(a/b*300) 
bx=300 
} 

document.getElementById("a").innerHTML=a; 
document.getElementById("b").innerHTML=b; 
document.getElementById("c").innerHTML=c; 
document.getElementById('trianglepoints').setAttribute("points",bx+",300 0,300 0,"+ay); 
} 

</script> 

<svg id="triangle xmlns="http://www.w3.org/2000/svg" version="1.1" height="300" width="300"> 
<polygon id="trianglepoints" points="" 
style="fill:red;stroke:black;stroke-width:1;"> 
</svg> 
<br /> 

<button type="button" onclick="pythagorean()">calculate</button> 
+0

http://jsfiddle.net/nHX44/ –

回答

3

要確保你投以element.value返回字符串

a = document.getElementById('vara').value; 
a = +a; 
-or- 
a = Number(a); 

否則,當你比較a > b它會做一個字符串比較,並'1001'小於'55'(首先比較第一個字符)。

+1

在'a'和'b'中存儲值時,使用'parseInt'或'parseFloat'可能更容易。 – Ian

+0

@ianpgall,它取決於正在使用的'a'和'b'的上下文,以及什麼值是可接受的。如果將'10em'轉換爲'10'後用作像素值,那麼使用'parseInt'可能並不直觀,而是選擇使用'isNaN'進行驗證檢查。最後,爲工作選擇正確的工具很重要。 – zzzzBov

+0

真棒,修復它謝謝 – rlwheeler

相關問題