Strict Standards: Resource ID#33 used as offset, casting to integer (33) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Ошибка в калькуляторе подсчета суммы
ТвойWeb » WebMaster класс » JavaScript » Ошибка в калькуляторе подсчета суммы

Страниц (1): [1]
 

1. veslo - 29 Января, 2010 - 15:58:47 - перейти к сообщению
Есть калькулятор подсчета суммы. Он считает правильно, но в некоторых значениях добавляется после запятой до 15-ти цифр (28.799999999999997). Как сократить до сотых? К примеру чтобы сумма выводилась со скидкой и без скидки - 28,79(два знака после запятой) . Вот он сам скрипт и весь калькулятор.
Или кто то подскажет аналогичный скрипт с подсчетом суммы и скидки?
CODE:
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
function price(form) {
if (form.a.checked){
var a=parseFloat(form.a.value);
}
else a=0;
if (form.b.checked){
var b=parseFloat(form.b.value);
}
else b=0;
if (form.c.checked){
var c=parseFloat(form.c.value);
}
else c=0;
if (form.d.checked){
var d=parseFloat(form.d.value);
}
else d=0;
if (form.e.checked){
var e=parseFloat(form.e.value);
}
else e=0;
if (form.f.checked){
var f=parseFloat(form.f.value);
}
else f=0;
if (form.g.checked){
var g=parseFloat(form.g.value);
}
else g=0;
if (form.h.checked){
var h=parseFloat(form.h.value);
}
else h=0;
if (form.k.checked){
var k=parseFloat(form.k.value);
}
else k=0;
if (form.l.checked){
var l=parseFloat(form.l.value);
}
else l=0;
if (form.skidka.checked){
var skidka=parseFloat(form.skidka.value);
}
else skidka=0;

var total=(a+b+c+d+e+f+g+h+k+l)-(skidka*(a+b+c+d+e+f+g+h+k+l));
document.getElementById("itog").innerHTML=total;
}
</SCRIPT>
</head>
<body>
<form name="form" onclick="price(this)">
<table width="31%" border="1" cellspacing="0" cellpadding="3">
<tr>
<td width="67" align="center">Выбрать</td>
<td width="101" align="center">Наименование</td>
<td width="100" align="center">Цена</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="a" /></td>
<td align="center">a</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="b" /></td>
<td align="center">b</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="c" /></td>
<td align="center">c</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="d" /></td>
<td align="center">d</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="e" /></td>
<td align="center">e</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="f" /></td>
<td align="center">f</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="g" /></td>
<td align="center">g</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="h" /></td>
<td align="center">h</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="k" /></td>
<td align="center">k</td>
<td align="center">3.2</td>
</tr>
<tr><td align="center"><input type="checkbox" value="3.2" name="l" /></td>
<td align="center">l</td>
<td align="center">3.2</td>
</tr>
<tr>
<td align="center"><input type="checkbox" value="0.10" name="skidka" checked="checked"/></td>
<td align="right">Скидка:</td>
<td align="center">10%</td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="right">Итого:</td>
<td align="center" id="itog" style="color: #993300;font-weight:bold; font-size:14px">0</td>
</tr>
</table>
</form>
</body>
</html>
2. veslo - 03 Февраля, 2010 - 14:05:37 - перейти к сообщению
Калькулятор абсолютно точно считает целые (23, 3 33, 98. 189..... и т.д.). А вот дробные (3,2 ; 54,4; 12,7; ... и т.д.) считает с милионными после запятой. Милионные появляются после сложения пяти цифр или сложения девяти и десяти цифр. Помогите исправить этот скрипт. Скрипт выше.
3. Davinchi - 09 Февраля, 2010 - 04:08:08 - перейти к сообщению
как вариант преобразовать число в строку, разбить ее по точке, и последнюю подстроку урезать до двух знаков
4. Furax - 09 Февраля, 2010 - 10:12:02 - перейти к сообщению
Думаю, идеологически правильнее домножить на 100, округлить (судя по приведённому примеру - вниз) и разделить обратно. По крайней мере, решится проблема с тем, что разделители целой и дробной части разные на разных машинах (точка, точка, запятая, минус, рожица кривая, etc.).
5. veslo - 09 Февраля, 2010 - 14:29:26 - перейти к сообщению
Davinchi пишет:
как вариант преобразовать число в строку, разбить ее по точке, и последнюю подстроку урезать до двух знаков

А в примере можно, а то я в скриптах не очень. Только методом тыка.
6. veslo - 09 Февраля, 2010 - 14:32:16 - перейти к сообщению
Furax пишет:
Думаю, идеологически правильнее домножить на 100, округлить (судя по приведённому примеру - вниз) и разделить обратно.

Целые числа считает точно. Не подскажешь как сделать подсчет именно дробных чисел.
Буду благодарен.
P.S. В скритах 0.
7. Furax - 09 Февраля, 2010 - 22:26:41 - перейти к сообщению
Округлять до сотых после каждой операции...
8. veslo - 10 Февраля, 2010 - 01:51:13 - перейти к сообщению
Furax пишет:
Округлять до сотых после каждой операции...

А как написать округление до сотых на скрипте не подскажешь?
9. Furax - 10 Февраля, 2010 - 03:36:18 - перейти к сообщению
CODE:
function round(A)
{
return Math.round(A*100)/100;
}
В нужных местах вместо, например, "a+b" пишешь "round(a+b)"

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0389]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33