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

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

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

Strict Standards: Resource ID#27 used as offset, casting to integer (27) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Ошибка в калькуляторе подсчета суммы
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


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

> Описание: Калькулятор подсчета суммы выдает после запятой много знаков
veslo
Отправлено: 29 Января, 2010 - 15:58:47
Post Id


Newbie


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2010  

Карма 0




Есть калькулятор подсчета суммы. Он считает правильно, но в некоторых значениях добавляется после запятой до 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>

Скачать файл: Untitled-1.rar
Скачан раз: 906

(Отредактировано автором: 30 Января, 2010 - 11:08:38)

 
 Top
veslo
Отправлено: 03 Февраля, 2010 - 14:05:37
Post Id


Newbie


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2010  

Карма 0




Калькулятор абсолютно точно считает целые (23, 3 33, 98. 189..... и т.д.). А вот дробные (3,2 ; 54,4; 12,7; ... и т.д.) считает с милионными после запятой. Милионные появляются после сложения пяти цифр или сложения девяти и десяти цифр. Помогите исправить этот скрипт. Скрипт выше.

(Отредактировано автором: 03 Февраля, 2010 - 14:07:29)

 
 Top
Davinchi
Отправлено: 09 Февраля, 2010 - 04:08:08
Post Id


Full Member


Покинул форум
Сообщений всего: 152
Дата рег-ции: Нояб. 2006  

Карма -2




как вариант преобразовать число в строку, разбить ее по точке, и последнюю подстроку урезать до двух знаков
 
 Top
Furax
Отправлено: 09 Февраля, 2010 - 10:12:02
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Думаю, идеологически правильнее домножить на 100, округлить (судя по приведённому примеру - вниз) и разделить обратно. По крайней мере, решится проблема с тем, что разделители целой и дробной части разные на разных машинах (точка, точка, запятая, минус, рожица кривая, etc.).
 
 Top
veslo
Отправлено: 09 Февраля, 2010 - 14:29:26
Post Id


Newbie


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2010  

Карма 0




Davinchi пишет:
как вариант преобразовать число в строку, разбить ее по точке, и последнюю подстроку урезать до двух знаков

А в примере можно, а то я в скриптах не очень. Только методом тыка.
 
 Top
veslo
Отправлено: 09 Февраля, 2010 - 14:32:16
Post Id


Newbie


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2010  

Карма 0




Furax пишет:
Думаю, идеологически правильнее домножить на 100, округлить (судя по приведённому примеру - вниз) и разделить обратно.

Целые числа считает точно. Не подскажешь как сделать подсчет именно дробных чисел.
Буду благодарен.
P.S. В скритах 0.
 
 Top
Furax
Отправлено: 09 Февраля, 2010 - 22:26:41
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Округлять до сотых после каждой операции...
 
 Top
veslo
Отправлено: 10 Февраля, 2010 - 01:51:13
Post Id


Newbie


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2010  

Карма 0




Furax пишет:
Округлять до сотых после каждой операции...

А как написать округление до сотых на скрипте не подскажешь?
 
 Top
Furax
Отправлено: 10 Февраля, 2010 - 03:36:18
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




CODE:
function round(A)
{
return Math.round(A*100)/100;
}
В нужных местах вместо, например, "a+b" пишешь "round(a+b)"
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« JavaScript »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


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

[Script Execution time: 0.0443]     [ 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