Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обратить строку в число, калькулятор, сложение значений из формы 
V
    Опции темы
griker
Дата 24.9.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MDMA
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 14.7.2006
Где: Tallinn

Репутация: 1
Всего: 8



Здравствуйте, у меня возникла проблема при создании калькулятора)
А именно проблема в том, что при следующей записи
Код

var a=document.form.n.value+document.form.m.value;

Это считывается как (при написании) значение первого input и второго input, а не сложение данных переменных.
Возможно данный вопрос является глупым, но всё равно спрашиваю.

Благодарю) 


--------------------
I don't respect police
PM MAIL   Вверх
dstorm81
Дата 24.9.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

Репутация: 20
Всего: 39



a=parseFloat(document.form.n.value)+parseFloat(document.form.m.value);


--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
griker
Дата 24.9.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MDMA
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 14.7.2006
Где: Tallinn

Репутация: 1
Всего: 8



Цитата(dstorm81 @ 24.9.2006,  20:44)
a=parseFloat(document.form.n.value)+parseFloat(document.form.m.value);

Большое спасибо) smile 


--------------------
I don't respect police
PM MAIL   Вверх
korisarimi
Дата 24.9.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 9.5.2006

Репутация: нет
Всего: 1



еще можно через Number(переменная).
PM MAIL   Вверх
Zeroglif
Дата 24.9.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Быстрее всего:

Код

var a = +document.form.n.value + +document.form.m.value;

И не нужна будет ни Number, ни тем более parseFloat...
PM MAIL WWW   Вверх
Sardar
Дата 25.9.2006, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Zeroglif, parseFloat в любом случае вызываеться самим транслятором, а читабельность конечно по вкусу.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Zeroglif
Дата 25.9.2006, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Sardar @  25.9.2006,  01:11 Найти цитируемый пост)
Zeroglif, parseFloat в любом случае вызываеться самим транслятором

Так, да не так, parseFloat лексически является идентификатором, согласно ES 10.1.4 мы ищем идентификатор среди свойств объектов, входящих в Scope Chain, пока по идее не найдём его в поле объекта Global (window в браузерах). Плюс к этому, в рамках самого алгоритма функции parseFloat, который предполагает, что мы можем подсунуть ему всякую пакость (объект, например), аргумент насильно приводится к строке (toString у объектов). Значит, и тут мы снова должны совершить небольшую прогулку, но уже по полям самого объекта (его прототипа и т.д.), если аргументом объект. Да к тому же некоторые из нас имеют стойкую привычку нативные свойства переопределять, parseFloat конечно вряд ли тронут, а вот toString запросто. Добавим сюда до кучи более сложный алгоритм самой функции, чем алгоритм конвертации через унарный плюс или через Number().

Ниже пример, где видно, сколько объектов Scope Chain нужно пройти, и как переопределение toString влияет на parseFloat. А если раскомментировать параметр в функции A, то мы переопределим ("забъём") уже и parseFloat, и само собой получим ошибку.

Код

String.prototype.toString = function(){return 666};

var x = new String('10');

(function A(/*parseFloat*/) {
    return function AA() {
        return function AAA() {
            return function AAAA() {
                return parseFloat(x);
            }();
        }();
    }();
})();


Я это всё не к тому, что дескать  нехорошо переопределять свойства или совать в аргумент объект (всего этого скорее всего не будет!), а к тому, что короткий путь к результату правильнее длинного туда же..., а читабельность конечно же по вкусу smile

Это сообщение отредактировал(а) Zeroglif - 25.9.2006, 03:04
PM MAIL WWW   Вверх
griker
Дата 25.9.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MDMA
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 14.7.2006
Где: Tallinn

Репутация: 1
Всего: 8



Всем большое спасибо за помощь  smile 
Благодарю  smile 


--------------------
I don't respect police
PM MAIL   Вверх
Sardar
Дата 25.9.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Zeroglif, вобще это зависит от реализации конечно, но если  помнить что скрипты не являються сильной стороной браузеров, то конечно ты прав smile  В твоём примере можно создат обьект Number с числом (не строкой) 9.5, при parseFloat всё равно будет вызвано toString, при +<ехп> нет.

Вывод: если требуеться сэкономить пару микросекунд, то лучше пользоваться приведением к числу через +.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1065 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.