2009-10-28 3 views
0

У меня почти такая работа, однако скрипт округляет мои числа, в то время как я хочу сохранить обе десятичные места по полной цене вместо автоматического округления. Моя песочница для этого сценария здесь:Javascript математика показывает десятичные разряды

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

Рассмотрите возможность использования десятичной библиотеки: 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); 

To:

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

И я думаю, что будет то, что вы хотите.