Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Как поделить число нацело в javascript?

#javascript



Как в javascript поделить число нацело?
Есть ли какой-то оператор для деления нацело?

    


Ответы

Ответ 1



Поделить на число без остатка в 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

Ответ 2



В 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)

Ответ 3



Как вариант деления использовать вот такую конструкцию function divme(a, b){ return (a - a%b)/b } нет UPD: встречал ещё вариант деления. Возможно будет вам полезна. Ссылка

Ответ 4



Вот ещё вариант: Math.floor(a / b); И вот такой, но с ним лучше быть осторожнее — работает лишь для небольших чисел (где-то до 4e9): a / b | 0

Ответ 5



Всё зависит от того, как вы хотите округлить результат деления. Math.floor(a/b); Math.floor(3/2); // = 1 Link Math.ceil(a/b); Math.ceil(3/2); // = 2; Link

Ответ 6



Воспользуйтесь функицией Math.trunc(x); Math.trunc(13.37); // 13 Math.trunc(42.84); // 42 Math.trunc(0.123); // 0 Math.trunc(-0.123); // -0 Math.trunc('-1.123'); // -1 Описание функции на MDN

Комментариев нет:

Отправить комментарий