parseInt 不将十进制转换为二进制?
parseInt not converting decimal to binary?
根据我的理解,二进制数系统使用两个数字 0 和 1 来执行计算。
为什么:
console.log(parseInt("11", 2));
return 3
而不是 00001011
?
http://www.binaryhexconverter.com/decimal-to-binary-converter
使用toString()代替parseInt
:
11..toString(2)
var str = "11";
var bin = (+str).toString(2);
console.log(bin)
根据 JavaScript 的文档:
The following examples all return NaN:
parseInt("546", 2);
// Digits are not valid for binary representations
parseInt(number, base)
returns 十进制 base
基数中 number
参数表示的数字值。
而11在二进制中相当于十进制数中的3。
var a = {};
window.addEventListener('input', function(e){
a[e.target.name] = e.target.value;
console.clear();
console.log( parseInt(a.number, a.base) );
}, false);
<input name='number' placeholder='number' value='1010'>
<input name='base' placeholder='base' size=3 value='2'>
parseInt() 函数解析字符串参数和 returns 指定基数(数学数字系统中的基数)的整数。
所以你是在告诉系统你想将 11 作为二进制转换为十进制。
具体到您所指的网站,如果您仔细观察,它实际上是使用 JS 发出 HTTP GET 以在 Web 服务器端转换它。类似以下内容:
http://www.binaryhexconverter.com/hesapla.php?fonksiyon=dec2bin°er=11&pad=false
如 documentation for parseInt
所述:parseInt() 函数解析字符串参数和 returns 指定基数的整数(数学数字系统的基础)。
所以,它正在做它应该做的事情:将 11
的二进制值转换为 3
的整数值。
如果您尝试将 11
的整数值转换为二进制值,则需要使用 Number.toString
方法:
console.log(11..toString(2)); // 1011
.toString(2)
应用于 Number
类型时有效。
255.toString(2) // syntax error
"255".toString(2); // 255
var n=255;
n.toString(2); // 11111111
// or in short
Number(255).toString(2) // 11111111
// or use two dots so that the compiler does
// mistake with the decimal place as in 250.x
255..toString(2) // 11111111
为了更好地理解,我认为您应该尝试自己计算该转换。
- (1) 11 / 2 = 5
- (1) 5 / 2 = 2
- (0) 2 / 2 = 1
- (1) 1 / 2 = 0
我根据那个逻辑做了一个函数
function decimalToBinary(inputNum) {
let binary = [];
while (inputNum > 0) {
if (inputNum % 2 === 1) {
binary.splice(0,0,1);
inputNum = (inputNum - 1) / 2;
} else {
binary.splice(0,0,0);
inputNum /= 2;
}
}
binary = binary.join('');
console.log(binary);
}
这是一个老问题,但是我有另一个解决方案可能会有所帮助。我通常使用这个函数将十进制数转换为二进制数:
function dec2bin(dec) {
return (dec >>> 0).toString(2);
}
dec >>> 0
将数字转换为字节,然后调用 toString(radix)
函数以 return 二进制字符串。简单干净。
注:radix
用于表示数值。必须是 2 到 36 之间的整数。例如:
- 2 - 该数字将显示为二进制值
- 8 - 该数字将显示为八进制值
- 16 - 该数字将显示为十六进制值
我认为您应该了解十进制到二进制转换背后的数学原理。这是 javascript.
中的简单实现
main();
function main() {
let input = 12;
let result = decimalToBinary(input);
console.log(result);
}
function decimalToBinary(input) {
let base = 2;
let inputNumber = input;
let quotient = 0;
let remainderArray = [];
let resultArray = [];
if (inputNumber) {
while (inputNumber) {
quotient = parseInt(inputNumber / base);
remainderArray.push(inputNumber % base);
inputNumber = quotient;
}
for (let i = remainderArray.length - 1; i >= 0; i--) {
resultArray.push(remainderArray[i]);
}
return parseInt(resultArray.join(''));
} else {
return `${input} is not a valid input`;
}
}
我找到的将 十进制字符串 转换为二进制的 shortes 方法是:
const input = "54654";
const output = (input*1).toString(2);
print(output);
这对我有用:parseInt(Number, original_base).toString(final_base)
例如:parseInt(32, 10).toString(2) 用于十进制到二进制的转换。
来源:https://www.w3resource.com/javascript-exercises/javascript-math-exercise-3.php
这是手动十进制到二进制算法的简明递归版本:
- 将十进制数分成两半并汇总每次运算的余数,直到值==0 并打印连接的二进制字符串
使用 25 的示例:25/2 = 12(r1)/2 = 6(r0)/2 = 3(r0)/2 = 1(r1)/2 = 0(r1) => 10011 => 反向 => 11001
function convertDecToBin(input){
return Array.from(recursiveImpl(input)).reverse().join(""); //convert string to array to use prototype reverse method as bits read right to left
function recursiveImpl(quotient){
const nextQuotient = Math.floor(quotient / 2); //divide subsequent quotient by 2 and take lower limit integer (if fractional)
const remainder = ""+quotient % 2; //use modulus for remainder and convert to string
return nextQuotient===0?remainder:remainder + recursiveImpl(nextQuotient); //if next quotient is evaluated to 0 then return the base case remainder else the remainder concatenated to value of next recursive call
}
}
function num(n){
return Number(n.toString(2));
}
console.log(num(5));
这就是我为获得解决方案所做的工作:
function addBinary(a,b) {
// function that converts decimal to binary
function dec2bin(dec) {
return (dec >>> 0).toString(2);
}
var sum = a+b; // add the two numbers together
return sum.toString(2); //converts sum to binary
}
addBinary(2, 3);
我先把十进制数转成二进制,然后在w3schools的JavaScript Bitwise课下得到了这个函数。然后为了让自己更轻松,我创建了变量 "sum" 来执行加法,最后,我将 addBinary 函数 return 和作为二进制代码,然后调用它。它通过了 CodeWars。我希望这是有道理的,它可以帮助你。
只需使用 Number(x).toString(base)。其中基数需要等于 2.
var num1=13;
Number(num1).toString(2)
结果:“1101”
Number(11).toString(2)
结果:“1011”
似乎字符串基数 (dec >>> 0).toString(2)
的转换返回的二进制数格式错误。我已经在 Chrome 中验证了这个解决方案。如果有人想手动计算二进制以进行验证,请从左到右将对应于二进制数映射到 [1][2][4][8][16][32][64][128] ...
.
的 1
位置的数字加在一起
例如:
10
在二进制中是 0101
或 0 + 2 + 0 + 8
.
13
在二进制中是 1011
或 1 + 0 + 4 + 8
.
255
在二进制中是 11111111
或 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128
function dec2bin(dec){
return (dec >>> 0).toString(2).split('').reverse().join('');
}
这会将十进制转换为二进制:
let num = "1234"
console.log(num.toString(2));
这会将二进制转换为十进制:
let num = "10011010010";
console.log(parseInt(num, 2));
根据我的理解,二进制数系统使用两个数字 0 和 1 来执行计算。
为什么:
console.log(parseInt("11", 2));
return 3
而不是 00001011
?
http://www.binaryhexconverter.com/decimal-to-binary-converter
使用toString()代替parseInt
:
11..toString(2)
var str = "11";
var bin = (+str).toString(2);
console.log(bin)
根据 JavaScript 的文档:
The following examples all return NaN:
parseInt("546", 2);
// Digits are not valid for binary representations
parseInt(number, base)
returns 十进制 base
基数中 number
参数表示的数字值。
而11在二进制中相当于十进制数中的3。
var a = {};
window.addEventListener('input', function(e){
a[e.target.name] = e.target.value;
console.clear();
console.log( parseInt(a.number, a.base) );
}, false);
<input name='number' placeholder='number' value='1010'>
<input name='base' placeholder='base' size=3 value='2'>
parseInt() 函数解析字符串参数和 returns 指定基数(数学数字系统中的基数)的整数。
所以你是在告诉系统你想将 11 作为二进制转换为十进制。
具体到您所指的网站,如果您仔细观察,它实际上是使用 JS 发出 HTTP GET 以在 Web 服务器端转换它。类似以下内容:
http://www.binaryhexconverter.com/hesapla.php?fonksiyon=dec2bin°er=11&pad=false
如 documentation for parseInt
所述:parseInt() 函数解析字符串参数和 returns 指定基数的整数(数学数字系统的基础)。
所以,它正在做它应该做的事情:将 11
的二进制值转换为 3
的整数值。
如果您尝试将 11
的整数值转换为二进制值,则需要使用 Number.toString
方法:
console.log(11..toString(2)); // 1011
.toString(2)
应用于 Number
类型时有效。
255.toString(2) // syntax error
"255".toString(2); // 255
var n=255;
n.toString(2); // 11111111
// or in short
Number(255).toString(2) // 11111111
// or use two dots so that the compiler does
// mistake with the decimal place as in 250.x
255..toString(2) // 11111111
为了更好地理解,我认为您应该尝试自己计算该转换。
- (1) 11 / 2 = 5
- (1) 5 / 2 = 2
- (0) 2 / 2 = 1
- (1) 1 / 2 = 0
我根据那个逻辑做了一个函数
function decimalToBinary(inputNum) { let binary = []; while (inputNum > 0) { if (inputNum % 2 === 1) { binary.splice(0,0,1); inputNum = (inputNum - 1) / 2; } else { binary.splice(0,0,0); inputNum /= 2; } } binary = binary.join(''); console.log(binary); }
这是一个老问题,但是我有另一个解决方案可能会有所帮助。我通常使用这个函数将十进制数转换为二进制数:
function dec2bin(dec) {
return (dec >>> 0).toString(2);
}
dec >>> 0
将数字转换为字节,然后调用 toString(radix)
函数以 return 二进制字符串。简单干净。
注:radix
用于表示数值。必须是 2 到 36 之间的整数。例如:
- 2 - 该数字将显示为二进制值
- 8 - 该数字将显示为八进制值
- 16 - 该数字将显示为十六进制值
我认为您应该了解十进制到二进制转换背后的数学原理。这是 javascript.
中的简单实现main();
function main() {
let input = 12;
let result = decimalToBinary(input);
console.log(result);
}
function decimalToBinary(input) {
let base = 2;
let inputNumber = input;
let quotient = 0;
let remainderArray = [];
let resultArray = [];
if (inputNumber) {
while (inputNumber) {
quotient = parseInt(inputNumber / base);
remainderArray.push(inputNumber % base);
inputNumber = quotient;
}
for (let i = remainderArray.length - 1; i >= 0; i--) {
resultArray.push(remainderArray[i]);
}
return parseInt(resultArray.join(''));
} else {
return `${input} is not a valid input`;
}
}
我找到的将 十进制字符串 转换为二进制的 shortes 方法是:
const input = "54654";
const output = (input*1).toString(2);
print(output);
这对我有用:parseInt(Number, original_base).toString(final_base)
例如:parseInt(32, 10).toString(2) 用于十进制到二进制的转换。
来源:https://www.w3resource.com/javascript-exercises/javascript-math-exercise-3.php
这是手动十进制到二进制算法的简明递归版本:
- 将十进制数分成两半并汇总每次运算的余数,直到值==0 并打印连接的二进制字符串
使用 25 的示例:25/2 = 12(r1)/2 = 6(r0)/2 = 3(r0)/2 = 1(r1)/2 = 0(r1) => 10011 => 反向 => 11001
function convertDecToBin(input){ return Array.from(recursiveImpl(input)).reverse().join(""); //convert string to array to use prototype reverse method as bits read right to left function recursiveImpl(quotient){ const nextQuotient = Math.floor(quotient / 2); //divide subsequent quotient by 2 and take lower limit integer (if fractional) const remainder = ""+quotient % 2; //use modulus for remainder and convert to string return nextQuotient===0?remainder:remainder + recursiveImpl(nextQuotient); //if next quotient is evaluated to 0 then return the base case remainder else the remainder concatenated to value of next recursive call } }
function num(n){
return Number(n.toString(2));
}
console.log(num(5));
这就是我为获得解决方案所做的工作:
function addBinary(a,b) {
// function that converts decimal to binary
function dec2bin(dec) {
return (dec >>> 0).toString(2);
}
var sum = a+b; // add the two numbers together
return sum.toString(2); //converts sum to binary
}
addBinary(2, 3);
我先把十进制数转成二进制,然后在w3schools的JavaScript Bitwise课下得到了这个函数。然后为了让自己更轻松,我创建了变量 "sum" 来执行加法,最后,我将 addBinary 函数 return 和作为二进制代码,然后调用它。它通过了 CodeWars。我希望这是有道理的,它可以帮助你。
只需使用 Number(x).toString(base)。其中基数需要等于 2.
var num1=13;
Number(num1).toString(2)
结果:“1101”
Number(11).toString(2)
结果:“1011”
似乎字符串基数 (dec >>> 0).toString(2)
的转换返回的二进制数格式错误。我已经在 Chrome 中验证了这个解决方案。如果有人想手动计算二进制以进行验证,请从左到右将对应于二进制数映射到 [1][2][4][8][16][32][64][128] ...
.
1
位置的数字加在一起
例如:
10
在二进制中是0101
或0 + 2 + 0 + 8
.13
在二进制中是1011
或1 + 0 + 4 + 8
.255
在二进制中是11111111
或1 + 2 + 4 + 8 + 16 + 32 + 64 + 128
function dec2bin(dec){
return (dec >>> 0).toString(2).split('').reverse().join('');
}
这会将十进制转换为二进制:
let num = "1234"
console.log(num.toString(2));
这会将二进制转换为十进制:
let num = "10011010010";
console.log(parseInt(num, 2));