[javascript] JavaScript에서 나머지를 가진 정수 나누기?

에서 자바 스크립트 , 어떻게받을 수 있나요 :

  1. 주어진 정수가 다른 정수로 들어가는 횟수는?
  2. 나머지?


답변

일부 수 y와 일부 제수의 x경우 몫 ( quotient)과 나머지 ( remainder)를 다음과 같이 계산하십시오 .

var quotient = Math.floor(y/x);
var remainder = y % x;


답변

나는 비트 연산자에 전문가가 아니지만 정수를 얻는 또 다른 방법이 있습니다.

var num = ~~(a / b);

음수에도 올바르게 작동하지만 Math.floor()잘못된 방향으로 반올림됩니다.

이것도 올바른 것 같습니다 :

var num = (a / b) >> 0;


답변

Firefox에서 일부 속도 테스트를 수행했습니다.

-100/3             // -33.33..., 0.3663 millisec
Math.floor(-100/3) // -34,       0.5016 millisec
~~(-100/3)         // -33,       0.3619 millisec
(-100/3>>0)        // -33,       0.3632 millisec
(-100/3|0)         // -33,       0.3856 millisec
(-100-(-100%3))/3  // -33,       0.3591 millisec

/* a=-100, b=3 */
a/b                // -33.33..., 0.4863 millisec
Math.floor(a/b)    // -34,       0.6019 millisec
~~(a/b)            // -33,       0.5148 millisec
(a/b>>0)           // -33,       0.5048 millisec
(a/b|0)            // -33,       0.5078 millisec
(a-(a%b))/b        // -33,       0.6649 millisec

위의 내용은 각각 1 천만 건의 시험을 기반으로합니다.

결론 :(a/b>>0) (또는 (~~(a/b))또는 (a/b|0))를 사용 하여 약 20 %의 효율성을 얻을 수 있습니다. 또한 Math.floor, 언제 에도 모두 일치하지 않습니다 a/b<0 && a%b!=0.


답변

ES6는 새로운 Math.trunc방법을 소개합니다 . 이렇게하면 @MarkElliot의 답변 을 수정 하여 음수에도 사용할 수 있습니다.

var div = Math.trunc(y/x);
var rem = y % x;

Math방법은 비트 연산자에 비해 2 31 이상의 숫자로 작동한다는 점에 유의하십시오 .


답변

var remainder = x % y;
return (x - remainder) / y;


답변

나는 보통 다음을 사용합니다.

const quotient =  (a - a % b) / b;
const remainder = a % b;

아마도 가장 우아하지는 않지만 작동합니다.


답변

함수 parseInt를 사용하여 잘린 결과를 얻을 수 있습니다.

parseInt(a/b)

나머지를 얻으려면 mod 연산자를 사용하십시오.

a%b

parseInt는 밑줄 10에 기수 매개 변수를 사용하지 않기 위해 문자열에 함정이 있습니다.

parseInt("09", 10)

경우에 따라 숫자의 문자열 표현은 과학적 표기법이 될 수 있으며,이 경우 parseInt는 잘못된 결과를 생성합니다.

parseInt(100000000000000000000000000000000, 10) // 1e+32

이 호출은 결과적으로 1을 생성합니다.