【问题标题】:Java: formatting numbers error?Java:格式化数字错误?
【发布时间】:2015-02-21 23:30:14
【问题描述】:

我遇到了一个关于使用字符串输入和输出转换数字格式的类的问题:

public class Conversion{

static int result;

public static String fromHexToDec (String clientInput) {
    result= Integer.parseInt(clientInput, 10);
    return Integer.toString(result);
}

public static String fromDecToHex (String clientInput) {
    result= Integer.parseInt(clientInput, 16);
    return Integer.toString(result);
}

public static String fromOctTo4 (String clientInput) {
    result= Integer.parseInt(clientInput, 4);
    return Integer.toString(result);
}

public static String from4ToOct(String clientInput) {
    result= Integer.parseInt(clientInput, 8);
    return Integer.toString(result);
}

public static String formBinToDec(String clientInput) {
    result= Integer.parseInt(clientInput, 10);
    return Integer.toString(result);
}

public static String fromDecToBin(String clientInput) {
    result= Integer.parseInt(clientInput, 2);
    return Integer.toString(result);
}

public static String from5To7(String clientInput) {
    result= Integer.parseInt(clientInput, 7);
    return Integer.toString(result);
}

public static String from7To5(String clientInput) {
    result= Integer.parseInt(clientInput, 5);
    return Integer.toString(result);
}

}

我在尝试在 main 方法中运行 fromHexToDec 时收到此错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "C"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Konverzija.fromHexToDec(Conversion.java:9)
at Test.main(Test.java:5)

有人可以帮忙吗?

【问题讨论】:

    标签: java string number-formatting numberformatexception


    【解决方案1】:

    Integer.parseInt(String s, int radix) 应该用于解析或“转换”字符串值到整数值。在这种情况下,基数是您希望该数字的字符串表示形式具有的基数。这意味着如果您希望 s 是一个数字的十六进制表示,您应该使用 16 作为基数,依此类推。 Integer.toString(int value, int radix) 方法正好相反:用于将整数 value 转换为给定基数的字符串表示形式。在这种情况下,您将指定 16 作为十六进制表示。您为解析指定的所有基数值都是错误的,并且您错过了对toString() 的调用的基数。当您想使用默认基数 10(十进制)时,您只能省略这些方法的基数参数。
    您的代码应如下所示:

    public class Conversion{
    
        static int result;
    
        public static String fromHexToDec (String clientInput) {
            result= Integer.parseInt(clientInput, 16);
            return Integer.toString(result);
        }
    
        public static String fromDecToHex (String clientInput) {
            result= Integer.parseInt(clientInput);
            return Integer.toString(result, 16);
        }
    
        public static String fromOctTo4 (String clientInput) {
            result= Integer.parseInt(clientInput, 8);
            return Integer.toString(result, 4);
        }
    
        public static String from4ToOct(String clientInput) {
            result= Integer.parseInt(clientInput, 4);
            return Integer.toString(result, 8);
        }
    
        public static String formBinToDec(String clientInput) {
            result= Integer.parseInt(clientInput, 2);
            return Integer.toString(result);
        }
    
        public static String fromDecToBin(String clientInput) {
            result= Integer.parseInt(clientInput);
            return Integer.toString(result, 2);
        }
    
        public static String from5To7(String clientInput) {
            result= Integer.parseInt(clientInput, 5);
            return Integer.toString(result, 7);
        }
    
        public static String from7To5(String clientInput) {
            result= Integer.parseInt(clientInput, 7);
            return Integer.toString(result, 5);
        }
    }
    

    【讨论】:

      【解决方案2】:

      因为

      public static String fromHexToDec (String clientInput) {
          result= Integer.parseInt(clientInput, 10);
          return Integer.toString(result);
      }
      

      正在将基数 10 传递给 parseInt()(这在十进制中无效)。使用 16 个赞

      public static String fromHexToDec (String clientInput) {
          result= Integer.parseInt(clientInput, 16);
          return Integer.toString(result);
      }
      

      fromDecToHex 应该是

      public static String fromDecToHex(String clientInput) {
          int result = Integer.parseInt(clientInput, 10);
          return Integer.toString(result, 16);
      }
      

      public static String fromDecToHex(String clientInput) {
          int result = Integer.parseInt(clientInput);
          return String.format("%02X", result);
      }
      

      第二个具有零填充的潜在优势。

      【讨论】:

      • 所以'radix'没有定义转换完成的格式,而是从哪个格式?
      • @dzenesiz 正确。当您拨打parseInt() 时,它是from,而当您拨打toString() 时它是to
      猜你喜欢
      • 2018-08-31
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多