Java 小数进制转换小数进制转换,实现任意进制转换为任意进制的方法实现任意进制转换为任意进制的方法
废话不多上干货!
/**
* 个人数学工具
*
* @author Suage
*/
class Convert {
//可用计数字符
private static String unit = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//输入数字
private String number;
//输入进制
private int sysIn;
//输出进制
private int sysOut;
//输入实际值
private double actualValue;
//小数计算精度
private int precision;
//用于存放结果
private StringBuilder result = new StringBuilder();
/**
* 获取当前位所代表的值
*
* @param sys 进制数
* @param index 距离小数点的距离
* @param var 当前位表示字符
* @return 当前位所代表的值
*/
private double changeNI(int sys, int index, char var) {
return unit.indexOf(var) * Math.pow(sys, index);
}
/**
* 将值转化为对应进制表示字符
*
* @param sys 进制数
* @param var 值
* @return 对应进制表示字符
*/
private char changeIN(int sys, int var) {
return unit.charAt(var);
}
/**
* 计算实际值
*/
private void calculateActualValue() {
//检查小数点
int pointIndex = number.indexOf('.');
//计算整数部分
if (pointIndex < 0) {//没有则
for (int i = 0; i < number.length(); i++) {
actualValue += (long) changeNI(sysIn, i, number.charAt(number.length() - i - 1));
}
} else {//如果有小数部分
for (int i = 0; i < pointIndex; i++) {
actualValue += (long) changeNI(sysIn, i, number.charAt(pointIndex - i - 1));
}
}
if (!(pointIndex < 0)) {//如果有小数部分
//计算小数部分
for (int i = pointIndex + 1; i = sysOut) { //反复除进制,取余数
result.insert(0, changeIN(sysOut, (int) (integerPart % sysOut))); //追加结果
integerPart = integerPart / sysOut;//商
评论0