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

Kolyaj 05.05.2011 12:05

Относительно данного случая, двум строкам делается +, с чего бы строки складывать как числа?

dmitriymar 05.05.2011 13:03

Kolyaj,
это monolithed,
по моему вопросу.у меня были заведомо числа.с ними всё норм ,а вот результаты ,после математических операций над ними начали складываться как строки

Kolyaj 05.05.2011 16:03

dmitriymar,
про это то бишь
Цитата:

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

Покажите пример, иначе не верю. Два числа всегда складываются как числа.

dmitriymar 06.05.2011 01:11

Kolyaj,
там строк 150 кода. операции над мат величинами. гдето строке на 50 начилась проблемы. до этого всё норм. думаю будет не правильно скидывать это сюда. но если интересно весь проект могу на почту скинуть. буду признателен если вы увидите мою недоработку изза чего это всё пошло. все мы люди-все ошибаемся-эт я о себе

Kolyaj 06.05.2011 08:44

Цитата:

Сообщение от dmitriymar
думаю будет не правильно скидывать это сюда

Угу, правильно локализовать проблему в несколько строк. После чего сами поймёте в чём ошибка.

dmitriymar 06.05.2011 12:24

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

Kolyaj 06.05.2011 12:30

Убирайте постепенно различные блоки кода, смотрите на каком ломается.

monolithed 06.05.2011 13:20

Цитата:

Сообщение от Kolyaj
Убирайте постепенно различные блоки кода, смотрите на каком ломается.

прям как разбирание исходников jQuery :D

dmitriymar 06.05.2011 13:39

Цитата:

Сообщение от Kolyaj
Убирайте постепенно различные блоки кода, смотрите на каком ломается.

убирал делал .вычисленная переменная -числовая. больше над ней операций не проводиться-используется в качестве аргумента и всё. и после нескольких использований перестаёт быть числовой -становиться строковой


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