Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Арифметическое сложение


Автор: GIK 4.6.2005, 11:19
Как сделать так чтобы числа складывались арифметически, а не "сливались"
в одно число.
Краткое описание программы:
Пользователем вводится число, это число при некотором условии складывается с другим, определенным, числом, через определенный промежуток времени. Итог помещается во вторую строку. И так далее до максимального числа.

Код
<script type="text/javascript">
function Func(obj) 
 { var k=obj.num.value
   if (k<10)
  {obj.num.value=k+2
   setTtmeout("func()", 500)}
  if (k>10) { obj.num2.value=obj.num.value}
 If (k>1000) {obj.num2.value="Достижение максимального числа"}
}
</script>
</head>
<body>
<form>
<input type="text" name="num" value="введите число" onfocus="this.value='';"><br>
<input type="text" name="num2" value="число+2">
<input type="button" value="вычислить" onClick="Func(this.form)"><br>
</form>
</body>


Добавлено @ 11:22
Ребята. если вы меня слышите.
ИЛЬ, спасибо за моральную поддержку. На ты со мной нужно.
Aliance извини за неправильный вход в форум.
Просто я не сразу не врубился как входить зарегистрированным.

Автор: sergejzr 4.6.2005, 11:29
http://vingrad.ru/JAVASCRIPT-JS-001953

PS:
Пожалуйста, пользуйтесь тэгами "Код".

Автор: GIK 4.6.2005, 13:54
Мне нужно преобразовать вводимы числа
в number smile
num1=Number(k);
где num1 заменяется "k" в if (k<10) и т.д.


Автор: sergejzr 4.6.2005, 14:03
Ээээ. Там же всё написано...


Код

str="1234";
num=parseInt(str);//теперь num - число, а не строка
num++;..прибавляем единицу
alert(num);//Выдаст 1235

Автор: o.s.a. 4.6.2005, 16:12
GIK, у меня была однажды такая же проблема
Для ее решения мне пришлось всего лишь почитать учебник smile

Автор: Aliance 5.6.2005, 21:01
Итак, немного о базовом JS.
В ЯваСкрипте существует определенное кол-во операторов, их условно можно поделить на три группы: унарные, бинарные и тернарные. Т.е. операторы, состоящие из 1, 2 и, соответственно, 3 операторов. Для ясности приведу примеры:
  • унарные: - в качестве оператора смены знака, т.е. оператор “минус” в выражении -1 представляет собой унарный оператор, выполняющий смену знака у одного единственного операнда.
  • бинарные: + в качестве оператора контектации строк, к примеру. Т.е. он соединяет две строки в единую.
  • тернарные: ? :

Оператор «плюс» является одним из самый сложных, т.к. он выполняет роль сразу нескольких операторов:
  • унарный плюс
  • сложение
  • контектация
  • инкремент

Теперь, не отходя от темы коснусь проблемы, которая попалась тебе.
Создавая выражения JavaScript, необходимо обращать особое внимание на типы данных. Т.к. различие в типах могут приводить к неожиданным последствиям, как это было в этом примере. При сложении чисел, необходимо убедиться, что оба операнда имеют численный тип данных или могут быть приведены к ним.
Если оператору «плюс» переданы одна строка и одно число, он преобразует число в строку и пытается выполнить контектацию, таим образом получается так:
Код

результатом выражения "1"+2 будет строка "12"


Оператор сам пытается (если это возможно) сделать перевод типов данных, но строчным имеет прерогативу над числовым. Соответственно, для получения необходимого результата нужно вручную перевести тип в необходимый:
Код

alert("22" + 8); // вернет 228
alert(toNumber("22") + 8); // вернет 30

Автор: GIK 6.6.2005, 13:02
Aliance спасибо что не заставил меня лезть в учебник.
Вопрос. Можно ли создать оператором переменную и присвоить ей ТИП "номер" и только потом присвойть значение? Будет ли это значение иметь ТИП-обычное число, которое можно складывать перемножать и т.д.?

Код

<html>
 <head>
<script type="text/javascript">
function Func(obj) 
{ var k=Number  // Присваиваю значение Namber (Надеюсь правильно)
  k=obj.num.value
 if (k>10)
  {obj.num.value=k+2
   setTimeout("func()", 10000)}
  if (k>10)  
  {obj.num2.value=obj.num.value}
  if (obj.num2.value>10000)
  {obj.num2.value="Максимальное число"}
}
</script>
</head>
<body>
<form>
Введите число больше 10: <input type="text" name="num" value="введите число" onfocus="this.value='';"><br>
<input type="text" name="num2" value="число+2">
<input type="button" value="вычислить" onClick="Func(this.form)"><br>
</form>
</body>
</html>
Заранее СПАСИБО.

М
 

Пользуйся форумной подсветкой кода!

Автор: sergejzr 6.6.2005, 13:08
Код

<html>
<head>
<script type="text/javascript">
function Func(obj)
{ //var k=Number // Присваиваю значение Namber (Надеюсь правильно)
k=parseInt(obj.num.value);//Именно здесь слово становится числом!!!
if (k>10)
{obj.num.value=k+2 //Здесь не надо переводить число в строку это будет сделано автоматически
setTimeout("func()", 10000)}
if (k>10)
{obj.num2.value=obj.num.value}
if (parseInt(obj.num2.value)>10000)//здесь опять сравниваем числа - на до перевести строку в число
{obj.num2.value="Максимальное число"}
}
</script>
</head>
<body>
<form>
Введите число больше 10: <input type="text" name="num" value="введите число" onfocus="this.value='';"><br>
<input type="text" name="num2" value="число+2">
<input type="button" value="вычислить" onClick="Func(this.form)"><br>
</form>
</body>
</html>



Пожалуйста, пользуйтесь тэгами "Код"!!! Ужо просил ведь smile
А учебники всё равно не помешает почитать smile

Автор: GIK 6.6.2005, 13:39
Спасибо.
А как теперь сделать, чтобы числа в полях изменялись по истечении времени,
и что значит "Здесь не надо переводить число в строку это будет сделано автоматически"? smile


Автор: sergejzr 6.6.2005, 13:53
По истечении времени у тебя вызывается функция func(), которая не определена в коде!!
Держу пари, ты просто ошибся регистром smile. Просто поставь "Func()"

теперь про типы:

Вот смотри если я пишу:

var X="1234";
var Y=1234;

Эти две переменные не равны!! Потгому что X - слово, а Y - цифра.

Если ты пытаешься сложить их, компьютер страратся привести обе к одному общему виду. Слово не всегда можно сделать числом, а наоборот можно!
Поэтому компьютер приводит обе переменные в строку и "складывает"
то есть

X+Y будет "12341234"

Для того, чтобы он сложил два числа, необходимо привести обе переменные к типу "число" поэтому мы делаем так:
parseInt(X)+Y теперь будет 2468.

Однако перевести число в строку компьютер может и без нашего напоминания.

Автор: GIK 6.6.2005, 13:59
Теперь понял.
СПАСИБО.

Автор: Aliance 6.6.2005, 16:59
Цитата(GIK @ 6.6.2005, 14:02)
Можно ли создать оператором переменную и присвоить ей ТИП "номер"

Да. Например так:
Код

var num = new Number(56); // число 56

Добавлено @ 17:03
Кстати, sergej.z, лучше не использовать ParseInt(), т.к. скажем если мы будемобрабатывать строку 2a в число - то она превратиться в число 2, т.е. потеряется и суть, и не будет сказано об ошибке smile

Автор: o.s.a. 6.6.2005, 17:03
так ведь
Код

var num = 56; 

это же тоже самое

Автор: Aliance 6.6.2005, 17:09
o.s.a.
угу, но тут было задан конкретный вопрос, т.к. иногда (лично у самого была такая ситуация) возникают такие ситуации, что необходимо явно указывать тип данных. Хотя для JavaScript это не характерно, т.к. он не является типизированным, как скажем Pascal.

Автор: sergejzr 6.6.2005, 17:13
Цитата(Aliance @ 6.6.2005, 15:59)
Кстати, sergej.z, лучше не использовать ParseInt(), т.к. скажем если мы будемобрабатывать строку 2a в число - то она превратиться в число 2, т.е. потеряется и суть, и не будет сказано об ошибке smile

Ну в данном коде это не играет большой роли. Проблема состояла не в выборе функции, а впонимании, зачем это делать.
parseInt() содержит в своём названии указание на способ работы, поэтому её и взял smile

o.s.a., прочитайте пожалуйста ещё раз условия задачи и мой предидущий пост.
не всегда у нас числа. Очень часто и строки тоже, которые нам надо преобразовать.



Автор: o.s.a. 6.6.2005, 17:15
Цитата
иногда (лично у самого была такая ситуация) возникают такие ситуации, что необходимо явно указывать тип данных.

Что за ситуация такая, когда
Код

var num = 56;

не подходит ??? smile
Добавлено @ 17:21
sergej.z все понятно
P.S. из твоего же поста: если скалдывать не X+Y, a Y+X получится как раз число
(просто нужно саму четко отслужывать типы данных smile )

Автор: Aliance 6.6.2005, 17:24
А когда нам нужно получить число из аргумент, нам же нужно его как-то профильтровать?
А когда мы берем данные из формы - кто знает что введет юзер в них...
И т.п...

Автор: sergejzr 6.6.2005, 17:34
Цитата(o @ 6.6.2005, 16:15)
P.S. из твоего же поста: если скалдывать не X+Y, a Y+X получится как раз число

Вряд ли smile
Общий знаменатель у обеих переменных - строка. Именно к ней и приведётся.

Автор: GIK 7.6.2005, 08:10
Ребят,
я нашел еще один способ, который на мой взгляд проще.
Нужно просто умножить на еденицу любую переменную.
Если данный способ с чем то сопрежен сообщите пожалуста.

Код

var n=obj.num.value
var n=1*n


М
 

Пользуемся подсветкой!

Автор: Sardar 8.6.2005, 00:26
GIK чем не подходит:
Код
var a="3877.98";
alert(parseInt(a));
alert(parseFloat(a));
alert(Number(a)); //результатом будет тип number, а не обьект
// как это было бы с new Number(a) 

Или непременно хотим пистать оригинально ? smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)