logo资料库

Java 小数进制转换,实现任意进制转换为任意进制的方法.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
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;//商
} if (integerPart != 0) { //如果最后未被除尽 result.insert(0, changeIN(sysOut, (int) integerPart)); //追加结果 } if (decimalsPart > 0) { //如果有小数部分 //添加小数点 result.append("."); for (int t = 0; t < precision; t++) { decimalsPart = decimalsPart * sysOut; result.append(changeIN(sysOut, (int) decimalsPart)); decimalsPart = decimalsPart - (int) decimalsPart; } } } /** * 进制转换 * * @param sysIn 输入进制(Input base) * @param sysOut 输出进制(Output base) * @param number 输入数字(Input number) * @param precision 输出精度(非小数此参数无效)(Output precision (non-decimal this parameter is not valid)) * @return 输出转换结果 */ public String Convert(int sysIn, int sysOut, String number, int precision) { this.sysIn = sysIn; this.sysOut = sysOut; this.number = number; this.precision = precision; calculateActualValue(); Convert(); return result.toString(); } } public class SysConvert { public static void main(String[] args) { Convert Convert = new Convert(); String result = Convert.Convert(10, 16, "465.78", 10); System.out.println(result); } } /* 控制台输出: 1D1.C7AE147AE1 */ 作者:丶Suage
分享到:
收藏