Сергей П.
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 лет назад
Это я знаю (школьная программа). Я не могу этой прописать в коде. Постоянные ошибки выдаёт скрипт.
Елена Б.
6863 сообщения
#12 лет назад
Crist, или так X = X * 1,3
Pilot-t, summ = summ * 1.3 , не?
Максим Ф.
3195 сообщений
#12 лет назад
30% комиссии себе берёте??? Будьте людьми, увеличивайте на 5%, какие 30, кризис же...
И ещё вот:
Сергей П.
11 сообщений
#12 лет назад
Цитата ("floppox"):
Pilot-t, summ = summ * 1.3 , не?


Не работает ко сожалению.
Елена Б.
6863 сообщения
#12 лет назад
Цитата ("Pilot-t"):
Не работает ко сожалению.

пошла стреляться...
Роман П.
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, умножения в вашем примере не видно. Разве что если вы таким образом умножаете на два
Ответ - да, можно умножать на саму себя.
Сергей П.
11 сообщений
#12 лет назад
Подскажите пожалуйста как это выглядит в коде.
Елена Б.
6863 сообщения
#12 лет назад
Цитата ("Pilot-t"):
num1 = num1 + num1;

вам бы в вечернюю школу... простите за высокомерие... но...
Сергей П.
11 сообщений
#12 лет назад
Цитата ("floppox"):
Цитата ("Pilot-t"):
num1 = num1 + num1;

вам бы в вечернюю школу... простите за высокомерие... но...


Поправил уже. Невнимательность просто!
Роман Беляев
16382 сообщения
#12 лет назад
Pilot-t, у вас записано правильно. Вы свой код запускали вообще? Проще было бы запустить и посмотреть на результат. Firebug есть, в конце концов, для отладки.
Оффтопик
Дядя на аватаре у вас больно знакомый
Сергей П.
11 сообщений
#12 лет назад
frig, вот сам пример полного скрипта. всё считает кроме как строку "Количество диаметра" -


Оффтопик
На аватаре Джони Деп (фильм "Страх и Ненависть в ЛасВегасе"
Роман Беляев
16382 сообщения
#12 лет назад
Я уже дал вам подсказку. Установите firebug и пройдите построчно по своему скрипту в отладчике. Увидите и значения переменных и все остальное.

Оффтопик
Цитата ("Pilot-t"):
"Страх и Ненависть в ЛасВегасе"

ага ага
Сергей П.
11 сообщений
#12 лет назад

if (frm.num1.checked == true)
{
num1 = num1;
}
else num1 = 1;


Вот что здесь не так?
Екатерина Ш.
488 сообщений
#12 лет назад
Цитата ("Pilot-t"):
Вот что здесь не так?

Может то, что frm.num1 не чекбокс?
А может стоит взять тот же файрбаг, как посоветовали, и проверить почему код не работает?
Или хотя бы глянуть в html-код:
<input type="text" onchange="calculator()" name="num1">

И, в результате, frm.num1 вполне себе может оказаться совсем не чекбоксом, а текстовым (frm.num1.value).
Его конечно можно еще и проверить на предмет нуля или вовсе незаполненности.
И перед дальнейшими манипуляциями не забыть конвертнуть из строки в число.