Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Деление с остатком (https://javascript.ru/forum/misc/50379-delenie-s-ostatkom.html)

GonzoT 24.09.2014 01:44

Деление с остатком
 
Помогите плиз! Допустим я делю число с остатком, а результат округляю. Как мне вернуть в input делимого числа произведение делителя и результата? Вот пример: http://jsfiddle.net/n9b18mvz/

document.divide.onclick = document.divide.onkeyup = function(){
    this.c.value = Math.ceil(this.a.value / this.b.value);
};


A - 233, B - 10 => результат получается 24 (т.к. производится округление до целого числа). Подскажите код как мне вернуть в input A значение 240 (т.е. C * B)

skrudjmakdak 24.09.2014 08:04

var a = 233;
var b = 10;
console.log(Math.ceil(a/b)*b);

GonzoT 24.09.2014 11:35

Спасибо за ответ, но мне ведь нужно, чтобы это значение (240) ни в консоли отображалось, а вместо значения input'а A (233) сразу после вычисления?
С помощью какой переменной можно это вычисление ((Math.ceil(a/b)*b)) ему присвоить?

skrudjmakdak 24.09.2014 12:21

document.divide.c.value = Math.ceil(document.divide.a.value / document.divide.b.value) * document.divide.b.value;

Aetae 24.09.2014 12:50

GonzoT, ты гуманитарий, да?
Элементарнейшей логики и ассоциативного мышления достаточно, чтобы переделать приведённую тобой строчку так, как тебе надо. Про программирование можно вообще ничего не знать. Дай этот пример первоклашке, и он выдаст тебе ответ.

GonzoT 24.09.2014 13:35

skrudjmakdak, твой пример записывает результат в C. А я пытаюсь вернуть этот результат в A, чтобы при этом поля B и С остались теми же. Должно получиться что-то вроде:

Я ввожу 233 / 10 = 24, а при клике, скажем, в неактивном поле в инпутах отображается 240 / 10 = 24

Aetae, да что ты говоришь? Перечитай вопрос! Я не пример решаю, а пытаюсь вернуть в форму A значение делимого, при котором получается целый округленный результат.

Aetae 24.09.2014 13:50

То и говорю. Поменять буковку "c" на буковку "a" - это конечно задача божественной сложности.

skrudjmakdak 24.09.2014 13:56

давайте начнем с событий. и их отделим друг от друга

событие при клике. (onkeyup мы пока вообще выкинули из кода)
document.divide.onclick = function(){
    console.log('event onclick');
    document.divide.a.value = Math.ceil(document.divide.a.value / document.divide.b.value) * document.divide.b.value;
};

мы кликаем по 1му полю, чтобы записать значение. и тут происходит событие click - а значит оно нам считает результат и в первое поле нам выдает какую то фигню. а все почему? потому что считать начинает когда форма еще не до конца заполнена.

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

GonzoT 24.09.2014 13:58

Aetae, так я менял на букву "а". Значение A тогда становится NaN. Попробуй сам на jsfiddle и увидишь :yes:

Aetae 24.09.2014 14:10

GonzoT, а нефиг делить на ноль потому что.:)

GonzoT 24.09.2014 14:19

skrudjmakdak, именно так, как Вы описали! Всё отлично считается при таком коде:
document.divide.onclick = function(){
    console.log('event onclick');
    document.divide.a.value = Math.ceil(document.divide.a.value / document.divide.b.value) * document.divide.b.value;
    document.divide.c.value = Math.ceil(document.divide.a.value / document.divide.b.value);
};

Но это обязует кликать в поле C, чтобы узнать результат C, а так же изменилось поле A. Можно ли это как-то избежать, например, посредством добавления того же onkeyup куда-то или каких-то jquery штук? :)

skrudjmakdak 24.09.2014 14:36

Цитата:

Сообщение от GonzoT (Сообщение 332098)
skrudjmakdak, именно так, как Вы описали! Всё отлично считается при таком коде:

а по моему нет, как было так и осталось :)
Цитата:

Сообщение от GonzoT (Сообщение 332098)
Но это обязует кликать в поле C, чтобы узнать результат C, а так же изменилось поле A. Можно ли это как-то избежать, например, посредством добавления того же onkeyup куда-то или каких-то jquery штук? :)

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

GonzoT 24.09.2014 15:07

Цитата:

Сообщение от skrudjmakdak (Сообщение 332101)
а по моему нет, как было так и осталось :)

Это потому, что я в прошлый раз пытался с onkeyup и поля были NaN ;)
В этот раз получилось, что всё сработало из-за того, что вы избавились от него)

Цитата:

Сообщение от skrudjmakdak (Сообщение 332101)
вообще то делают кнопку и на нее вешают событие. и когда форма заполнена, то кликают по кнопке. разумеется срабатывает событие и пользователь получает результат

Знаю, что с кнопкой это возможно, но хотелось бы обойти этот вариант :)
Может всё-таки есть какие-то возможности помимо этой?

skrudjmakdak 24.09.2014 15:27

можно на второе поле повесить onblur, но где гарантия, что пользователь не начнет вводить данные со второго поля?

GonzoT 24.09.2014 21:30

Цитата:

Сообщение от skrudjmakdak (Сообщение 332107)
можно на второе поле повесить onblur, но где гарантия, что пользователь не начнет вводить данные со второго поля?

В итоге повесил onblur на инпут A, а результат A / B вынес в onkeyup. Не совсем то, чего я пытался добиться, но всё равно капельку лучше, чем было :)
document.divide.onclick = document.divide.onkeyup = function(){
    document.divide.c.value = Math.ceil(document.divide.a.value / document.divide.b.value);
};

document.divide.onclick = function division(){
    document.divide.a.value = Math.ceil(document.divide.a.value / document.divide.b.value) * document.divide.b.value;
};

Благодарю за помощь и дельные советы! :thanks:


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