Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите исправить ошибки в лабораторных работах по информатике (https://javascript.ru/forum/misc/17018-pomogite-ispravit-oshibki-v-laboratornykh-rabotakh-po-informatike.html)

muzhik65 02.05.2011 22:15

Помогите исправить ошибки в лабораторных работах по информатике
 
Помогите пожалуйста исправить ошибку, при нажатии на функцию сложение, складываются не 2 числа а эти числа просто пишутся рядом ,например 1+2= не 3 ,а 12


<html>
<head><title>Калькулятор</title>
<script language="JavaScript">
function calc(){
var a = form1.al.value;
var b = form1.bl.value;
var d = form1.del.checked;
var e = form1.ymn.checked;
var g = form1.mines.checked;
var c = form1.plus.checked;
if (d==true)
form1.resultl.value = a / b;
if (e==true)
form1.resultl.value = a * b;
if (g==true)
form1.resultl.value = a - b;
if (c==true)
form1.resultl.value = a + b;
}
</script>
</head>
<body>
<form name="form1">
<p><input type="radio" name="del">Деление</p>
<p><input type="radio" name="ymn">Умножение</p>
<p><input type="radio" name="plus">Сложение</p>
<p><input type="radio" name="mines">Вычитание</p>
Число 1: <input type="text" name="al"><br>
Число 2: <input type="text" name="bl"><br>
Результат: <input type="text" name="resultl">
<input type="button" name="Решить" value="Решить" onClick="calc()">
<input type="reset" name="Отмена" value="Отмена">
</form>
</body>
</html>

B@rmaley.e><e 02.05.2011 22:25

В JavaScript оператор сложения перегружен: если один из аргументов - строка, то другой тоже приводится к строке и происходит конкатенация. Поэтому, Вам нужно привести свои переменные к числовому типу.

monolithed 02.05.2011 22:52

<script type="text/javascript">
window.onload = function() {
    var forma = document.forma.elements;
    forma[3].onclick = function() {
        var val = function(i) {
            return parseFloat(forma[i].value);
        };
        forma[2].value = val(0) + val(1);
        return false;
    };
};
</script>
<form name="forma">
    <input type="text" value="" /> +
    <input type="text" value="" /> =
    <input type="text" value="" readonly="readonly" />
    <input type="submit" value="click" />
</form>

muzhik65 02.05.2011 23:20

Благодарю вас!

dmitriymar 02.05.2011 23:22

Сегодня налетел.два числа,в этом уверен-поскольку используются в выражениях математических и результат правильный-а между собой как строки начали складываться-пришлось переводить тип

monolithed 03.05.2011 18:28

Цитата:

Сообщение от dmitriymar
строки начали складываться-пришлось переводить тип

нет чтобы ввести типизацию ;)
раньше AS компилятор в браузеры встроят :D

dmitriymar 04.05.2011 11:34

Цитата:

Сообщение от monolithed
нет чтобы ввести типизацию

а по подробнее?.мож одно и тоже по разному называем)

monolithed 04.05.2011 18:01

Цитата:

Сообщение от dmitriymar
а по подробнее?.мож одно и тоже по разному называем)

var i:int = 10; //целочисленное значение (как в AS)

Kolyaj 04.05.2011 18:30

monolithed,
и что это даст?

monolithed 04.05.2011 21:34

Относительно этого случая, если для входящих аргументов будет использоваться приведение типов, то к целочисленным значениям не будет примерна конкатенация строк.
По сути это будет тот же parseInt/Float, но только для переменной изначально будет выделено определенное количество байтов для хранения значений и результат всегда будет предсказуем (для всех категорий разработчиков)...


Часовой пояс GMT +3, время: 03:08.