2009-10-28 5 views
0

나는 거의 자동으로 반올림되지 않고 두 자리 소수점 자리를 유지하려는 동안 스크립트가이 숫자를 반올림하지만이 작업을 수행합니다.자바 스크립트 수학 자리 소수점 표시

http://www.zacharydesigns.com/sandbox/calculatorJS2.html

여기에 코드입니다 :이 스크립트에 대한 나의 샌드 박스는 여기

<script type="text/javascript"> 

function update1() { 
    var a = +document.forms['calc'].elements['productOne'].value, 
     b = +document.forms['calc'].elements['productTwo'].value, 
     c = +document.forms['calc'].elements['productThree'].value, 
     productTotal = Math.floor(a/(a+b+c)*399.99); 

    document.forms['calc'].elements['productTotal1'].value = productTotal; 

    return false; 
} 

function update2() { 
    var a = +document.forms['calc'].elements['productOne'].value, 
     b = +document.forms['calc'].elements['productTwo'].value, 
     c = +document.forms['calc'].elements['productThree'].value, 
     productTotal = Math.floor(b/(a+b+c)*399.99); 

    document.forms['calc'].elements['productTotal2'].value = productTotal; 

    return false; 
} 

function update3() { 
    var a = +document.forms['calc'].elements['productOne'].value, 
     b = +document.forms['calc'].elements['productTwo'].value, 
     c = +document.forms['calc'].elements['productThree'].value, 
     productTotal = Math.floor(c/(a+b+c)*399.99); 

    document.forms['calc'].elements['productTotal3'].value = productTotal; 

    return false; 
} 
</script> 

<form name="calc" action="#"> 

<table align="center" 
border="1"><tr><td align="right">Boots: </td> 
<td align="left"><input type="text" name="productOne" size="5" /> 
</td> 
<td colspan="2" align="center"> 
<input type="button" value="Calculate" 
onclick="update1();" /> </td> 
<td align="right">Product Total:</td><td align="left"> 

<input type="text" name="productTotal1" size="6" 
readonly="readonly" /></td> 
</tr> 
<tr> 
<td align="right">Bindings: </td> 
<td align="left"><input type="text" name="productTwo" size="5" /> 
</td> 
<td colspan="2" align="center"> 
<input type="button" value="Calculate" 
onclick="update2();" /> </td> 
<td align="right">Product Total:</td><td align="left"> 

<input type="text" name="productTotal2" size="6" 
readonly="readonly" /></td> 
</tr><tr> 
<td align="right">Boards: </td> 
<td align="left"><input type="text" name="productThree" size="5" /> 
</td> 
<td colspan="2" align="center"> 
<input type="button" value="Calculate" 
onclick="update3();" /> </td> 
<td align="right">Product Total:</td><td align="left"> 

<input type="text" name="productTotal3" size="6" 
readonly="readonly" /></td> 
</tr><tr></tr> 

</tr> 
</table></form> 

사람이 내가 그것을 반올림하지 않고 전체 수에 작동 수학을 가질 수있는 방법을 말해 주시겠습니까?

+0

10 진수 라이브러리 사용을 고려하십시오. http://stackoverflow.com/questions/744099/javascript-bigdecimal-library/1575569 –

답변

3

플로어 연산자를 사용하고있는 것이 문제라고 생각합니다. 바닥 연산자는 항상 가장 가까운 정수로 반올림합니다.

floor(3.5) == 3 
floor(5.9999999999999999999999999999) = 5 
floor(5) = 5 

그리고 나는 당신이 드리프트를 얻은 것 같아요. 원하는 것은 소수 자릿수를 포맷하는 것입니다. toFixed() 함수는이를위한 것입니다. 그래서 기본적으로

, 변경이 라인 :

productTotal = Math.floor(c/(a+b+c)*399.99); 

하려면 :

productTotal = (c/(a+b+c)*399.99).toFixed(2); 

그리고 나는 당신이 원하는 될 것이라 생각합니다.