2012-05-08 3 views
0

У меня эта расчетная форма работает очень хорошо для моего клиента, а кто-то пошел и положил в поле процент 0.93, и он показал неправильную сумму.Расчетная форма

На сайте: 10 х 10 х 15 х 0,93 = 13,95

Должно быть: 10 х 10 х 15 х 0,93 = 1.395

Я понятия не имею, что изменения в JavaScript, чтобы получить полная остановка в нужном месте

Это сценарий.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
<title></title> 
<script type="text/javascript"> 
function calculate() { 
    var fields = [], i = 1, el, val, whole, total; 
    for (i; i < 5; ++i) { 
     el = document.getElementById('el' + i); val = el.value; 
     if((whole = i < 3) && /\./.test(val) || isNaN(Number(val))) { 
      alert("Please enter only " + (whole? 'whole ' : '') + "numbers\nfor " + (el.value = el.defaultValue)); 
      el.focus(); 
      el.select(); 
      return; 
     } 
     fields.push(val); 
    } 
    total = (fields[0] * fields[1] * fields[2])*fields[3]/100; 
    document.getElementById('calculate').innerHTML = "Total: " + total; 
} 
</script></head> 

<body> 
<form action="#" onSubmit="calculate(); return false;"> 
    <label>Days: <input type="text" id="el1" value="10"></label> 
    <label>Taxis: <input type="text" id="el2" value="10"></label> 
    <label>Perdiem: <input type="text" id="el3" value="15"></label> 
    <label>Discount: <input type="text" id="el4" value="93"></label> 
    <div id="calculate">Total:</div> 
    <br /> 
    <br /> 
    <input type="submit" value="Calculate"> 
</form> 
</body> 

</html> 

Буду признателен за любую помощь в этом.

Благодаря

ответ

1

Вы пытались использовать:

total = (fields[0] * fields[1] * fields[2])*fields[3]/1000

вместо:

total = (fields[0] * fields[1] * fields[2])*fields[3]/100

+0

Я не пробовал это, просто играл с остальной частью кодирования. ** Спасибо, что это сработает ** – Drakinfly

1

Попробуйте это:

function getFormattedNumber(number, decimals) { 
    return number.toFixed(decimals); 
} 

Он возвращает строку с номером, фиксированную на указанные десятичные разряды.

Это то, что он будет делать:

For 2dp: getFormattedNumber(number, 2): 
number:    return: 
13.435345345   13.44 
10.3435345   10.34 

For 3dp: getFormattedNumber(number, 3): 
number: 
9.556622    9.557 

т.д.

Таким образом, вы можете работать с соответствующими номерами, и использовать его для фиксации знаков после запятой.

+0

p.s. используйте 'parseFloat (string)', чтобы получить номер обратно из строкового вывода этой функции – Ozzy

Смежные вопросы