1

我有一个可以工作的十进制到二进制转换器,但我希望它总是显示 8 位数字,所以如果我输入 3,它会说 '00000011' 而不是 '11' 有人知道如何做到这一点吗?我的代码:

<script type="text/javascript">
        function ConvertToBinary(dec) {
            var bits = [];
            var dividend = dec;
            var remainder = 0;
            while (dividend >= 2) {
                remainder = dividend % 2;
                bits.push(remainder);
                dividend = (dividend - remainder) / 2;
            }
            bits.push(dividend);
            bits.reverse();
            return bits.join("");


        }

<input type="text" id="txtDec" maxlength="3"/>
<input type="button" value="Convert" onclick="document.getElementById('spBin').innerHTML=ConvertToBinary(document.getElementById('txtDec').value);" />
<span id="spBin"></span>
4

4 回答 4

3

JavaScript 已经使用toString方法从数字为您进行了转换,因为您可以指定基数(参见上面的链接):

var n = 13;
console.log(n.toString(2)) // "1101"

如果要添加前导零,以防小于 8,您可以:

var bits = n.toString(2);

console.log("00000000".substr(bits.length) + bits);

只需一个方法调用。

编辑:这个答案是在 2013 年写的,现在方法padStart可以用来代替填充:

console.log(n.toString(2).padStart(8, "0"));
于 2013-10-17T20:04:12.487 回答
1

这个怎么样:

return String('000000000' + bits.join("")).slice(-8);

演示(更改“股息”以尝试不同的数字)

基本上在左边添加 8 个零,然后从左边删除超过 8 个字符的长度。

于 2013-10-17T19:59:46.780 回答
0

bits.reverse(); 在你做这样的while循环之前怎么样:

while(bits.length < 8){
    bits.push(0);
}
于 2013-10-17T19:59:49.570 回答
0

这是一个示例解决方案,它将用零填充一个数字

@param "num" 用零填充的数字

@param "width" 结果所需的字符数

@return String 左边的数字

function zeroFill(num, width) {
str = String((new Array(width+1)).join('0') + num).slice(-width)
return str
}

还有其他解决方案使用循环来创建零点。

于 2014-10-05T23:10:35.107 回答