에서 자바 스크립트 , 어떻게받을 수 있나요 :
- 주어진 정수가 다른 정수로 들어가는 횟수는?
- 나머지?
답변
일부 수 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을 생성합니다.