在java中将十进制数转换为不显示前导零的二进制数

在java中将十进制数转换为不显示前导零的二进制数,java,math,binary,decimal,Java,Math,Binary,Decimal,这是我在Java中的函数: public static String convertFromDecimal(int number, int base) { String result = ""; /* * This while loop will keep running until 'number' is not 0 */ while(number != 0) {

这是我在Java中的函数:

public static String convertFromDecimal(int number, int base)
    {

        String result = "";

        /*
         * This while loop will keep running until 'number' is not 0
         */

        while(number != 0)
        {
            result = (number%base) + result; // Appending the remainder
            number = number / base; // Dividing the number by the base so we can get the next remainder
        }

        // If the number is already 0, then the while loop will ignore it, so we will return "0"

        if(result == "") 
        {
            return "0";
        }

        return result;

    }
它适用于转换为不以0开头的数字,如果数字的开头应该是零,它将不会记录它,有人能告诉我为什么吗

例如,如果我打印

convertFromDecimal(13,2)
它返回

1101

这是正确的,但如果我打印出来

convertFromDecimal(461,2)
,我得到

111001101

实际答案是什么

0000000 111001101

这和我的答案一样,没有前导零,如果有人知道我为什么会感谢你的帮助,谢谢


编辑我的问题是不同的,因为我不想要16位数字,我想要给定十进制数的二进制数,一个计算器可以解释我想要什么。

我想你是想把所有答案格式化为短(16位)

在这种情况下,只需检查当前字符串的长度,并根据需要添加零

int zeroesRemaining = 16 - result.length();
for (int i = 0; i < zeroesRemaining; i++) {
    result = "0" + result;
}
int zeroesRemaining=16-result.length();
对于(int i=0;i
或者,如果您想更快地完成,请使用StringBuilder

int zeroesRemaining = 16 - result.length();
StringBuilder tempBuilder = new StringBuilder(result);
for (int i = 0; i < zeroesRemaining; i++) {
    tempBuilder.insert(0, 0); //inserts the integer 0 at position 0 of the stringbuilder
}
return tempBuilder.toString(); //converts to string format
int zeroesRemaining=16-result.length();
StringBuilder tempBuilder=新的StringBuilder(结果);
对于(int i=0;i
也可能有一个格式化程序可以做到这一点,但我不知道有这样的


如果要将零的数量更改为最接近的整数原语,只需将zeroesRemaining设置为(大于位数的2的最小幂)减去(位数)。

因为您希望结果的长度固定,以8位为一组,最简单的方法是将
0
附加到
结果的前面,直到其长度为8的倍数

这很简单

wile (result.length() % 8 > 0) 
{
    result = "0" + result;
}
return result;

听起来你应该做一些调试。好吧,如果你想打印一个16位的二进制值,461可以用9位表示,那么你的循环就结束了。为什么你认为绳子会再长?您需要获得结果的长度,并根据需要填充尽可能多的0。可能重复@OldProgrammer,因此程序认为循环应该结束,因为只有0?这就是你的意思吗?“一个数字的“二进制表示法”没有前导零,就像“42
的“十进制表示法”永远不会写入(或返回,除非特别要求)为
000042
。在某个时刻,你必须告诉你的程序要返回多少位。如果我想把23转换成二进制怎么办,答案是
00010111
但现在我的函数将打印出
0000000000010111
只需将zeroesRemaining更改为2的最小幂,即大于位数减去位数。很抱歉,这没有任何意义,如果我将zeroesRemaining更改为2的最小幂,大于位数减去位数。。。(大于位数减去位数)=0。。不如果我错了(2的最小幂大于位数)减去(位数),请纠正我。哦,好的,我现在明白了。此外,评论中有人解释说,这是我的计划没问题,但由于你的回答与我提出的问题是正确的(不知道我在问什么),我将接受你的回答,这样它可以帮助未来的居民,谢谢你的帮助!