1 package com.xxx.transfer; 2 3 /** 4 * 数字进制相互转换 5 * @see JDK中提供了这些功能 6 * @author le.li 7 * 8 */ 9 public class NumberUtil { 10 public static void main(String[] args) { 11 // 通过X的n次方相加的方式,将二进制转换成十进制 12 System.out.println(binary2Decimal("1001")); 13 // 通过取余数的方式,将十进制转成二进制 14 System.out.println(decimal2Binary(9)); 15 16 // jdk中二进制转十进制方式 17 System.out.println(Integer.parseInt("1001", 2)); 18 // jdk中十进制转二进制方式 19 System.out.println(Integer.toBinaryString(9)); 20 System.out.println(Integer.toString(9, 2)); 21 } 22 23 /** 24 * 二进制转十进制 25 * @param number 26 * @return 27 */ 28 public static int binary2Decimal(String number) { 29 return scale2Decimal(number, 2); 30 } 31 32 /** 33 * 其他进制转十进制 34 * @param number 35 * @return 36 */ 37 public static int scale2Decimal(String number, int scale) { 38 checkNumber(number); 39 if (2 > scale || scale > 32) { 40 throw new IllegalArgumentException("scale is not in range"); 41 } 42 // 不同其他进制转十进制,修改这里即可 43 int total = 0; 44 String[] ch = number.split(""); 45 int chLength = ch.length; 46 for (int i = 0; i < chLength; i++) { 47 total += Integer.valueOf(ch[i]) * Math.pow(scale, chLength - 1 - i); 48 } 49 return total; 50 51 } 52 53 /** 54 * 二进制转十进制 55 * @param number 56 * @return 57 */ 58 public static String decimal2Binary(int number) { 59 return decimal2Scale(number, 2); 60 } 61 62 /** 63 * 十进制转其他进制 64 * @param number 65 * @param scale 66 * @return 67 */ 68 public static String decimal2Scale(int number, int scale) { 69 if (2 > scale || scale > 32) { 70 throw new IllegalArgumentException("scale is not in range"); 71 } 72 String result = ""; 73 while (0 != number) { 74 result = number % scale + result; 75 number = number / scale; 76 } 77 78 return result; 79 } 80 81 public static void checkNumber(String number) { 82 String regexp = "^\\d+$"; 83 if (null == number || !number.matches(regexp)) 84 { 85 throw new IllegalArgumentException("input is not a number"); 86 } 87 } 88 }