|
|
|
| Здравствуйте. Такой вопрос, потребовалось мне написать программку на яве по расчёту стоимости монтажа для моего сайта http://www.vholodok.ru/ . В яве совершенно не разбираюсь но немного пишу на РНР . Откопал несколько справочников, разобрал несколько примеров, в прицепи для выполнения моей задачи думал достаточно.
Задача простая создаю форму там поля, пользователь выбирает из списка нужные виды работ (например: монтаж такой + авто вышка+ какие то доп работы ) все эти значения умножаются, прибавляются и в итоге получается примерная стоимость монтажа.
Но есть засада. Когда я ставлю знак плюс, то переменные не складываются а состыковываются:
itog = ((array_days_of+montash_sistemi)+cena_trub+cena_koroba+dop_otberctie)*koll_montazh;
Я подозреваю, что значение переменных у меня не числовые а строковые . Не знаю где засада
Посмотрите что у меня получается, я на яве первый раз пишу так сказать проба пера :
<html>
<SCRIPT language="JavaScript">
function calc()
{
form_el = document.forms['forma_montash'].elements;//имя формы//
tip_sistemi = form_el['tip_sistemi'].value;//Тип кондиционера//
moshnost_stemi = form_el['moshnost_stemi'].value;//Мощность кондиционера//
montash_sistemi = form_el['montash_sistemi'].value;//Вариант Монтажа кондиционера//
diametr_trub = form_el['diametr_trub'].options[form_el['diametr_trub'].options.selectedIndex].value;//Диаметр межблочной магистрали//
dlinna_trub = form_el['dlinna_trub'].value;//Длинна межблочной магистрали//
razmer_koroba = form_el['razmer_koroba'].options[form_el['razmer_koroba'].options.selectedIndex].value;//Размер короба//
dlinna_koroba = form_el['dlinna_koroba'].value;//Длинна короба//
dop_otberctie = form_el['dop_otberctie'].value;//Доп. отверстие//
koll_montazh = form_el['koll_montazh'].value;//Кол-во монтаж dop_otberctie//
//Начало стоимости монтажа оборудования (Тип кондиционера * Мощность кондиционера)//
itogo_vicisleniya=(tip_sistemi+moshnost_stemi);
var days_of_week = new Array(12);
days_of_week["nasten2"] = 1111; //Столькото рублей//
days_of_week["nasten18"] = 222;
days_of_week["nasten30"] = 333;
days_of_week["kasset2"] = 4444;
days_of_week["kasset18"] = 5555;
days_of_week["kasset30"] = 6666;
days_of_week["kana2"] = 7777;
days_of_week["kanal8"] = 8888;
days_of_week["kana30"] = 999;
days_of_week["potol2"] = 1010;
days_of_week["potoll8"] = 1212;
days_of_week["potol30"] = 1414;
alert(days_of_week[itogo_vicisleniya]) ; //Тест //
array_days_of = (days_of_week[itogo_vicisleniya]) ;
//-----------------------------------------------------//
cena_trub = (diametr_trub*dlinna_trub) ;// стоимости межблочной магистрали (Длинна * Диаметр)//
cena_koroba = (razmer_koroba*dlinna_koroba) ;// стоимости короба (Длинна * Диаметр)//
itog = ((array_days_of+montash_sistemi)+cena_trub+cena_koroba+dop_otberctie)*koll_montazh;//????????????тут нужна помощ??????????//
document.forms['forma_montash'].elements['itogo'].value = itog;
//-----------------------------------------------------//
}
</SCRIPT>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>П</title>
</head>
<body>
<div align="center">
<table width="50%" border="1" cellpadding="5" cellspacing="5" bgcolor="#C0C0C0">
<!--скрипт расчёта кондиционера-->
<FORM name=forma_montash>
<tr>
<td><span class="raschet_text">Тип оборудования<br />
</span>
<SELECT name="tip_sistemi" class="raschet_forma">
<OPTION value="nasten" selected>Настенный</OPTION>
<OPTION value="kasset">Кассетный</OPTION>
<OPTION value="kanal">Канальный</OPTION>
<OPTION value="potol">Потолочный</OPTION>
<OPTION value="nasten">Напольный</OPTION>
</SELECT>
</td>
</tr>
<tr>
<td><span class="raschet_text">Мощность оборудования<br />
</span>
<SELECT name="moshnost_stemi" class="raschet_forma">
<OPTION value="2" selected>0,5-12(1,5-3,99)кВт</OPTION>
<OPTION value="18">18-24(4-7,5)кВт</OPTION>
<OPTION value="30">30-36(8,2-10,3)кВт</OPTION>
</SELECT>
</td>
</tr>
<tr>
<td><span class="raschet_text">Варианты монтажа<br />
</span>
<SELECT name="montash_sistemi" class="raschet_forma">
<OPTION value="100">1 этаж (лестница)</OPTION>
<OPTION value="200">2 этаж (лестница)</OPTION>
<OPTION value="300">Под окно</OPTION>
<OPTION value="400">Автовышка (до 5 этажа)</OPTION>
<OPTION value="500">Автовышка (до 8 этажа)</OPTION>
<OPTION value="600">Альпинист</OPTION>
</SELECT>
</td>
</tr>
<tr>
<td><span class="raschet_text">Диаметр и длинна магистрали<br />
<SELECT name="diametr_trub" class="raschet_forma">
<OPTION value="370" selected>1/4 + 3/8</OPTION>
<OPTION value="422">1/4 + 1/2</OPTION>
<OPTION value="536">1/4 + 5/8</OPTION>
<OPTION value="600">3/8 + 5/8</OPTION>
<OPTION value="666">3/8 + 3/4</OPTION>
<OPTION value="718">1/2 + 3/4</OPTION>
</SELECT> </span>
<INPUT name="dlinna_trub" value="3" size="15" class="raschet_forma" /></td>
</tr>
<tr>
<td><span class="raschet_text">Короб декоративный<br />
<SELECT name="razmer_koroba" class="raschet_forma">
<OPTION value="370" selected>100х100</OPTION>
<OPTION value="400">150х150</OPTION>
<OPTION value="500">120х120</OPTION>
<OPTION value="600">120х120</OPTION>
</SELECT> </span>
<INPUT name="dlinna_koroba" value="3" size="15" class="raschet_forma" /></td>
</tr>
<tr>
<td><span lang="ru"><span class="raschet_text">Доп.
отверстие</span></span><br />
<input name="dop_otberctie" value="2" size="15" class="raschet_forma" /></td>
</tr>
<tr>
<td><span class="raschet_text">Кол. монтажей</span><br />
<input name="koll_montazh" value="2" size="15" class="raschet_forma" /></td>
</tr>
<tr>
<td class="raschet_forma"><div align="center">
<INPUT onClick="calc()" type="button" value="Рассчитать" />
<INPUT type="reset" value="Очистить" />
</div></td>
</tr>
<tr>
<td class="raschet_text"><div align="center"><strong>
Цена монтажа кондиционера должна составить</strong></div></td>
</tr>
<tr>
<td class="raschet_forma">Итого:
<input size="50" name="itogo" /> руб.</td>
</tr>
</form></table>
</div>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: STEKLO 22
(26.03.2009 в 11:31)
| | для преобразования строк в числа есть ф-ции: parseInt и parseFloat | |
|
|
|
|
|
|
|
для: STEKLO 22
(26.03.2009 в 11:31)
| | Отдельного оператора конкатенации строк (как точка в PHP) в Javascript'e нет
- в нём используется обычный +. Парсер САМ определяет тип операндов и,
если это тип Number (число), то происходит арифметическое сложение,
а если это тип String (строка) - то осуществляется конкатенация.
Свойство value ВСЕГДА возвращает переменную типа String,
потому у вас и происходит конкатенация.
В общем, проблема решается просто:
в тех случаях, когда значение value ЗАВЕДОМО должно быть ЧИСЛОМ,
его и НУЖНО преобразовать в число.
Это делается так:
dlinna_trub = form_el['dlinna_trub'].value * 1;//Длинна межблочной магистрали//
| Сделайте аналогично со всеми переменными, где вам ЗАВЕДОМО нужно иметь числовое значение.
PS. можно, разумеется, использовать и методы, кои вам (одновременно со мной) предложены
коллегой Волки, но мой способ работает с теми же результатами, но много быстрее. | |
|
|
|
|
|
|
|
для: PAT
(26.03.2009 в 12:44)
| | О супер всё работает ;
Спасибо | |
|
|
|