Поделить на число без остатка в JS можно несколькоми способами.
Способ 1. Округление:
var x = 10, y = 3.3333;
alert(Math.floor(x/y));
Этот способ расчитан на результат вычисления больше нуля. Если результат будет отрицательный, то такая конструкция сработает не правильно.
Например :
Math.floor(-100/3); // Выдаст -34, хотя целая часть от -33,33333336 будет равна -33
Как вариант, для решения этой задачи округлением можно использовать опертор if:
if(x/y>=0)
alert(Math.floor(x/y));
else
alert(Math.ceil(x/y));
Способ 2 : Вероятно не такой быстрый как предыдущий, но более универсальный. Приведение к int:
var x = 10, y = 3.3333;
alert(parseInt(x/y));
Способ 3. Производительный и универсальный:
var x = 10, y = 3.3333;
function div(val, by){
return (val - val % by) / by;
}
alert(div(x, y));
Ну и немного хадкора:
alert(~~(x/y)) // сокращенный Math.floor() результаты будут такие же
alert(x/y>>0)
alert(x/y|0)
демо на jsfiddle
В javascript отсутствует деление на целые числа и числа с плавающей запятой.
Возможно, как следствие, отсутствуют и специальные арифметические операторы для целый чисел.
Исходя из этого есть несколько вариантов решения:
Выполнение обычного деления и взятие от результата целой части. Для этой процедуры есть функции Math.floor и Math.ceil, разница заключается в том, большее целое или меньшее будет выбрано.
console.log(Math.floor(10 / 3));
console.log(Math.floor(-10 / 3));
console.log(Math.ceil(10 / 3));
console.log(Math.ceil(-10 / 3));
Как видно из примера, для положительных чисел подходит floor
, для отрицательных ceil
Использование битовых операций. На уровне спецификации, указано, что битовые операции работают только с 32х битными целыми числами, поэтому при работе с ними стоит быть осторожным: при применении их к большим числа, старшие биты числа будут обрезаны. При этом это позволяет быстро брать целую часть, за счет приведения аргумента к целому числу перед выполнением битовой операции.
Широко распространенным приемом является применение побитового или с 0
, что оставляет все биты исходного числа неизменными. А также побитовый сдвиг, так же на 0 разрядов
console.log((10 / 3) | 0);
console.log((-10 / 3) | 0);
console.log((10 / 3) >> 0);
console.log((-10 / 3) >> 0);
console.log(' Неожиданно: ', (10000000000 / 2) | 0)
console.log(' Неожиданно: ', (10000000000 / 2) >> 0)
Как вариант деления использовать вот такую конструкцию
function divme(a, b){
return (a - a%b)/b
}
нет
UPD: встречал ещё вариант деления. Возможно будет вам полезна. Ссылка
Вот ещё вариант:
Math.floor(a / b);
И вот такой, но с ним лучше быть осторожнее — работает лишь для небольших чисел (где-то до 4e9):
a / b | 0
Всё зависит от того, как вы хотите округлить результат деления.
Math.floor(a/b);
Math.floor(3/2); // = 1
Link
Math.ceil(a/b);
Math.ceil(3/2); // = 2;
Link
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Стажируюсь в компании на фронтенд-разработчика, пришел с строготипизированной джавы, и некоторые моменты мне не очевидны, а именно:
Я видел подобные вопросы на этом ресурсе и на оригинальном и у меня все-равно проблема
здравствуйте, есть несколько чекбоксов, как показано на скриншоте
СУБД: MySQL 55, сервер: Apache 24, PHP 7, пробую сделать без фреймворков