java 十进制与任意进制的相互转换

一、十进制是一种特殊的数制。

二、其他进制转十进制(java)
        java的基类(Long, Integer, Short)中都提供提供有静态方法将其他进制转十进制:
               方法:valueOf(String s, int radix);     // 将 radix 进制的数 s 转换为十进制(Integer.parseInt(String s, int radix) 也可以)。
               Long.valueOf("10A",15);      //十五进制的的数‘10A’ 转换为十进制数; 结果:235

三、十进制转其他进制
       1. java的基类(Long, Integer)中都提供提供有静态方法将十进制转为二、八、十六进制:
                转二进制:toBinaryString(i);
                转八进制:toOctalString(i);
                转十六进制:toHexString(i);

        2. 十进制转其他进制:

	/**十进制 转换成 N 进制
	 * @param val 十进制数据
	 * @param radix 进制
	 * @return  结果
	 */
	static String TenTransToN(long val, int radix){
		
		long temp = val;
		int len = 1; //目标进制的字符串长度
		while(temp >= radix){
			temp = temp/radix;
			len++;
		}
		
		char[] buf = new char[len];
		formatLong(buf, val, radix, len);
		
		return new String(buf);
	}
	
	static void formatLong(char[] buf, long val, int radix, int len){
		long temp;
		long radixPow;
		int charPos = len;
		--len;
		while(charPos != 0){
			//Math.pow 方法某些数据较大时得不到正确的值。 如:Math.pow(15, 14) 结果的个位不是5. 见注释1
			radixPow = (long) Math.pow(radix, --charPos);
			temp = val;
			if(val >= radixPow){
				val = temp % radixPow;
				buf[len - charPos] = digits[(int) (temp / radixPow)];
			}else{
				buf[len - charPos] = '0';
			}
		}
	}
	
	static char[] digits = {
	        '0' , '1' , '2' , '3' , '4' , '5' ,
	        '6' , '7' , '8' , '9' , 'a' , 'b' ,
	        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
	        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
	        'o' , 'p' , 'q' , 'r' , 's' , 't' ,
	        'u' , 'v' , 'w' , 'x' , 'y' , 'z'
	    };

注释0:radix 为偶数,不会出问题(eg: TenTransToN(Long.MAX_VALUE, 14));

             radix 为奇数,被转换的数太大,结果会是错误的(eg:(eg: TenTransToN(Long.MAX_VALUE, 15)))。

注释1:Math.pow 的参数和返回值是double类型,数据太大时 会用科学计数法表示出现误差。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值