从Double转换为Binary

时间:2013-09-19 11:54:11

标签: java floating-point binary hex octal

我在解决这个课程问题时遇到了很多麻烦。我的截止日期是明天,我仍然不知道该怎么做。当用户输入的输入转换为二进制,八进制和十六进制时,我创建了一个代码。现在,问题是现在他们要求我以用户输入Double或Floating点并将其转换为decimal的方式修改代码。我最大的问题是使用十进制数;例如,5 * .987 *。我将保留已创建的代码。我会非常感激有人可以帮忙!谢谢:))

import java.util.Scanner;

class EncodingTester {

public static void main(String args[]) {

    byte largestPositiveByte   = 127;
    short largestPositiveShort = 32767;
    int largestPositiveInt     = 2147483647;
    long largestPositiveLong   = 9223372036854775807L;
    long largestPositiveLongPlusOne   = 9223372036854775807L;

    Scanner in = new Scanner(System.in);

    System.out.println("Next number (0 to stop): ");
    long nextNumber = in.nextLong();

    while (nextNumber != 0) {

        int radix;


        double logBase2 = Math.log(nextNumber) / Math.log(2);

        double absoluteNumOfBits = 1 + Math.floor(logBase2);

        double maxBits = Math.max(8, absoluteNumOfBits);

        double numBits = Math.log(maxBits) / Math.log(2);

        int newNumBits = (int) Math.pow(2, Math.ceil(numBits));

        System.out.println("The absolute number of bits is:  " +absoluteNumOfBits +". The final number of bits is: " +newNumBits +".");

        radix = 10;
        System.out.println("Decimal: " + String.format("%s",  Double.toString(nextNumber)).replace(' ','0'));

        radix = 2;
        System.out.println("Binary: " + String.format("%"+newNumBits+"s",  Long.toString(nextNumber,radix)).replace(' ','0'));

        radix = 8;
        System.out.println("Octal: " + String.format("%"+((int) Math.ceil(newNumBits/3.0))+"s",  Long.toString(nextNumber,radix)).replace(' ','0'));

        radix = 16;
        System.out.println("Hexadecimal: 0x" + String.format("%"+newNumBits/4+"s",  Long.toString(nextNumber,radix)).replace(' ','0'));

        System.out.println("");
        System.out.println("Next number: (0 to stop)");
        nextNumber = in.nextLong();
    }
    System.out.println("Good Bye");
 }
}

0 个答案:

没有答案