JavaScript에서 이진 값을 십진수로 변환할 때 일어날 수 있는 무시무시한 일
6895 단어 tutorialjavascriptbeginners
//convert binary to decimal
function convertBinary(binary) {
let inDecimal = 0;
let power = 0;
for(let i=binary.length-1; i>=0; i--) {
if(binary[i]==1) {
inDecimal += Math.pow(2, power);
}
power++;
}
return inDecimal;
}
console.log(convertBinary('101')); // returns 5
보시다시피 몇 가지 변수, 루프, 내장 메서드가 사용됩니다. 이제 더 짧고 간단한 방법을 찾아야 할 때입니다.
한 줄의 코드로 가능합니까?
이유의 예!
이를 위해 몇 가지 방법을 사용할 수 있습니다.
방법 1: ES6 바이너리 리터럴
ES6에서는 binary literals 으로 이를 달성할 수 있습니다.
console.log(0B101); // returns 5
// or
console.log(0b101); // returns 5
방법 2: Number() 객체
Number(value)
개체는 문자열 형식 또는 다른 형식의 값을 인수로 받아 Number
형식으로 변환하는 함수로 사용할 수 있습니다.Number
는 0b101
, 0o13
, 0x0A
와 같은 리터럴 형식으로 표현할 수 있으므로 리터럴 형식의 값을 수락하고 십진수로 변환할 수 있습니다.
Number('0b101'); // returns 5
// or
Number(0b101); // returns 5
방법 3: parseInt() 메서드
parseInt()
은 parseInt(string, radix)
두 개의 인수를 허용합니다. 첫 번째 인수는 구문 분석할 값이고 두 번째 인수는 해당 값의 기수입니다.
console.log(parseInt('101', 2)); // returns 5
참고: 더 많은 방법을 알고 있다면 아래에 의견을 말하십시오. 이 기사를 더 유용하게 만들 것입니다.
지금이 가장 무서운 부분입니다
이제 바이너리 값을 변환할 때 으스스한 결과를 얻을 수 있는 방법이 있습니다.
1. parseInt()는 리터럴 형식의 값을 허용하지 않습니다.
아래와 같이 바이너리 리터럴을 변환하려고 하면 다음과 같은 결과가 나옵니다. 변환할 수 없는 것을 찾을 때까지 숫자 형식으로 변환할 수 있는 모든 값을 가져오기 때문입니다.
이 경우에는 0만 잡고 b는 문자열형 문자로 받습니다. 그래서 0만 반환합니다.
parseInt('0b101', 2); // returns 0
2. parseInt()는 숫자 구분 기호와 함께 작동하지 않습니다.
긴 숫자를 읽기 쉽게 구분하기 위해 numeric separator을 사용합니다.
그러나
parseInt()
와 함께 사용하면 잘못된 결과가 나타납니다. 밑줄을 찾을 때까지 첫 번째 문자를 잡고 number
유형으로 변환합니다.
parseInt('11_00', 2); // returns 3 expected 12
3. parseInt()는 호환되지 않는 기수가 있는 NaN을 반환합니다.
parseInt('321', 10); // returns 321
parseInt('321', 2)); // returns NaN
이것은 내가 바이너리로 작업하여 얻은 끔찍한 결과입니다. 당신이 더 많은 것을 얻는다면 그들이 얼마나 무서운지 알려주는 것을 잊지 마십시오.
Reference
이 문제에 관하여(JavaScript에서 이진 값을 십진수로 변환할 때 일어날 수 있는 무시무시한 일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mkday/spooky-things-that-can-happen-to-you-when-you-convert-binary-values-to-decimals-in-javascript-30ia텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)