Помогите, пожалуйста, со скриптом JS
11 сообщений
#12 лет назад
Здравствуйте!Уважаемые, помогите пожалуй или подскажите как сделать так, чтобы при расчете на калькуляторе JS к сумме прибавлялся процент от той же самой изначальной суммы.
Сейчас я сделал так чтобы переменная quantity просто умножала сумму в два раза. А вот как сделать так чтобы она добавляла 30% от цены для меня загадка.
Помогите пожалуйста. Буду премного благодарен!
Собственно сам скрипт:
function calculator()
{
var summ;
var frm = window.document.forms;
var sel, diam, otopl, krov, fund, elekt, vodop, quantity;
sel = 0;
/*Диаметр*/
if (frm.diam.value == 200)
{
diam = 2800;
}
else if(frm.diam.value == 220)
{
diam = 3200;
}
else if(frm.diam.value == 240)
{
diam = 350;
}
else if(frm.diam.value == 260)
{
diam = 3800;
}
else if(frm.diam.value == 280)
{
diam = 4000;
}
else diam = 0;
/*Диаметр*/
if (frm.otopl.checked == true)
{
otopl = 1000;
}
else otopl = 0;
if (frm.krov.checked == true)
{
krov = 2000;
}
else krov = 0;
if (frm.fund.checked == true)
{
fund = 1500;
}
else fund = 0;
if (frm.elekt.checked == true)
{
elekt = 500;
}
else elekt = 0;
if (frm.vodop.checked == true)
{
vodop = 500;
}
else vodop = 0;
quantity = frm.construction_quantity.value;
summ = (sel + diam + fund + otopl + krov + elekt + vodop) * quantity;
frm.construction_price_display.value = summ;
}
Ссылка: ссылка
Заранее вам всем благодарен за помощь! Спасибо!
1599 сообщений
#12 лет назад
Т.е. вы не знаете вообще что такое "процент"?30% от суммы X = (X / 100) * 30
так что 130% от суммы X = X + (X / 100) * 30
11 сообщений
#12 лет назад
Это я знаю (школьная программа). Я не могу этой прописать в коде. Постоянные ошибки выдаёт скрипт.
3195 сообщений
11 сообщений
1599 сообщений
#12 лет назад
floppox, товарищ, наверное, так и написал, как вы сказали. С ", не?" на конце XD На самом деле, в таких элементарных случаях не следует давать советы и уж тем более, готовый код) достаточно логики, иначе человек ничему не научится и даже не будет пытаться что-то сделать.
616 сообщений
#12 лет назад
А если summ = (sel + diam + fund + otopl + krov + elekt + vodop) * quantity;
заменить на
summ = ((sel + diam + fund + otopl + krov + elekt + vodop) * quantity) * 1.3;
или
frm.construction_price_display.value = summ;
на
frm.construction_price_display.value = summ * 1.3;
2989 сообщений
#12 лет назад
Скорее всего на момент выполнения (sel + diam + fund + otopl + krov + elekt + vodop) * quantity одна из переменных не определена строго как число. JavaScript не умеет умножать строки. Наиболее подозрительно вот это quantity = frm.construction_quantity.value. Нет никакой гарантии, что quantity теперь число (например не правильный десятичный разделитель, пробел в значении, null и т.д.).
11 сообщений
#12 лет назад
Ещё раз здравствуйте со скриптом полностью разобрался с вашей помощью. Но возник ещё один вопрос. Возможно ли умножить переменную саму на себя?
Как то так чтоли:
function calculator()
{
var summ;
var frm = window.document.forms;
var sel, num1, quantity;
sel = 0;
if (frm.num1.checked == true)
{
num1 = num1*num1;
}
else num1 = 0;
summ = num1;
frm.construction_price_display.value = summ;
}
Заранее буду благодарен всем откликнувшимся!
16382 сообщения
#12 лет назад
Pilot-t, умножения в вашем примере не видно. Разве что если вы таким образом умножаете на два 
Ответ - да, можно умножать на саму себя.
6863 сообщения
#12 лет назад
Цитата ("Pilot-t"):num1 = num1 + num1;
вам бы в вечернюю школу... простите за высокомерие... но...
11 сообщений
#12 лет назад
Цитата ("floppox"):Цитата ("Pilot-t"):num1 = num1 + num1;
вам бы в вечернюю школу... простите за высокомерие... но...
Поправил уже. Невнимательность просто!
16382 сообщения
11 сообщений
16382 сообщения
11 сообщений
488 сообщений
#12 лет назад
Цитата ("Pilot-t"):Вот что здесь не так?
Может то, что frm.num1 не чекбокс?
А может стоит взять тот же файрбаг, как посоветовали, и проверить почему код не работает?
Или хотя бы глянуть в html-код:
<input type="text" onchange="calculator()" name="num1">
И, в результате, frm.num1 вполне себе может оказаться совсем не чекбоксом, а текстовым (frm.num1.value).
Его конечно можно еще и проверить на предмет нуля или вовсе незаполненности.
И перед дальнейшими манипуляциями не забыть конвертнуть из строки в число.