有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java十进制转换错误

我正在写一个程序,将八进制数转换成小数。它编译正确,但我的转换代码有一些主要错误。在我看来,这似乎是完全合乎逻辑的,但是不知何故,当我运行程序时,转换是错误的(即1转换为36)。有人能指出哪里出了问题吗

 public static int convert(int octal)
{
    int d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0;

    if(octal >=9999999){
    d8 = (octal-(octal%10000000));}
    if(octal >=999999){
    d7 = (octal-(octal%1000000));}
    if(octal >=99999){
    d6 = (octal-(octal%100000));}
    if(octal >=9999){
    d5 = (octal-(octal%10000));}
    if(octal >= 999){
    d4 = (octal-(octal%1000));}
    if(octal >= 99){
    d3 = (octal-(octal%100));}
    if(octal >= 9){
    d2 = (octal-(octal%10));}
    if(octal >= 0){
    d1 = (octal-(octal%1));}


    octal = (d8 * 8^7) + (d7 * 8^6) + (d6 * 8^5) + (d5 * 8^4) + (d4 * 8^3) + (d3 * 8^2) + (d2 * 8^1) + (d1 * 8^0);

    return octal;

}

这只是我的转换方法,我的主要方法是收集 整数八进制


共 (4) 个答案

  1. # 1 楼答案

    你有一个潜在的误解,它会一直把你搞得一团糟

    就其本身而言,根本不存在“八进制数”。{}不是十进制、罗马数字或八进制——它只是一个数字

    “八进制数”实际上意味着“一个包含数字八进制表示的字符串”

  2. # 2 楼答案

    如果你有重复的代码,你可以考虑一个循环。

    public static void main(String... args) {
        for (long i = 7, j = 7; i > 0; i = i * 10 + 1, j = j * 8 + 1) {
            long c = convert(i);
            if (c != j)
                throw new AssertionError(i + ": " + c + " != " + j);
            System.out.println(i + " = > " + j);
        }
    }
    
    public static long convert(long octal) {
        long ret = 0;
        for (long i = 1000000000000000000L, j = 1L << (3 * 18); i > 0; i /= 10, j >>= 3)
            ret += j * (octal / i % 10);
        return ret;
    }
    

    印刷品

    7 = > 7
    71 = > 57
    711 = > 457
    7111 = > 3657
    71111 = > 29257
    711111 = > 234057
    7111111 = > 1872457
    71111111 = > 14979657
    711111111 = > 119837257
    7111111111 = > 958698057
    71111111111 = > 7669584457
    711111111111 = > 61356675657
    7111111111111 = > 490853405257
    71111111111111 = > 3926827242057
    711111111111111 = > 31414617936457
    7111111111111111 = > 251316943491657
    71111111111111111 = > 2010535547933257
    711111111111111111 = > 16084284383466057
    7111111111111111111 = > 128674275067728457
    
  3. # 3 楼答案

    这就是问题所在:

    8^7
    

    这个^{} operator并不像你想象的那样。它做二进制异或运算

    然而,我要说的是,整个设计显然是可疑的。一个int值不是“in”八进制或任何其他基-它只是一个整数。数字10就是数字10,无论它在十进制中表示为“10”,在十六进制中表示为“A”,在八进制中表示为“12”。如果有一个字符序列要解析为八进制数字,那么该方法的输入应该是String,而不是int

  4. # 4 楼答案

    由于您的方法接受一个整数(通常用字符串表示为十进制),并且您输出的也是一个整数,所以您并没有真正变成“八进制整数”,而是将它完全变成了另一个整数。您试图将整数正确地转换为八进制,然后将八进制错误地解释为十进制

    如果希望将整数转换为八进制字符串表示形式,只需使用以下方法:

    public static String convert(int number) {
        Integer.toOctalString(number);
    }
    

    如果你真的想返回一个int来表示八进制字符串,就像它是十进制的一样,你可以这么做:

    public static int convert(int number) {
        return Integer.parseInt(Integer.toOctalString(number));
    }