z,jz : 进制,只取2,8,10,16
1.十进制-多进制
(无小数)
string str= mResult.ToString();
TextBoxResult.Text= Convert.ToString(int.Parse(str),z);
(有小数)
//进制转换。十进制-多进制字符串 public string change_d(double num,int jz) { char[] y = new Char[30]; char[] y0 = new Char[20]; int numb1 = (int)num;//num的整数位 double numb2 = num - (double)numb1;//num的小数位 int i = 0; for (i = 0; numb1 != 0; i++) { if ((numb1 % jz) <= 9 && (numb1 % jz) >= 0) y0[i] = Convert.ToChar((numb1 % jz) + '0'); else y0[i] = Convert.ToChar((numb1 % jz) + 'a' - 10); numb1 /= jz; } for (int u = 0; u < i; u++) { y[u] = y0[i - u - 1]; } if (numb2 > 0.0000001) { y[i] = '.'; for (int j = i + 1; numb2 != 0 && j - i <= 10; j++) { if ((numb2 * jz) <= 9 && (numb2 * jz) >= 0) y[j] = Convert.ToChar((int)(numb2 * jz) + '0'); else y[j] = Convert.ToChar((int)(numb2 * jz) + 'a' - 10); double z = (int)(numb2 * jz); numb2 = numb2 * jz - z; } } string str = new string(y); return str; }
2.多进制-十进制 (允许小数)
public double change_s(int jz) { double dot = 0; double y = 0; char[] x = TextBoxResult.Text.ToCharArray(); int w = 0; int m = 0; for (int i = TextBoxResult.Text.Length - 1; i >= 0; i--) { if (x[i] != '.') { m = 1; for (int j = 0; j < w; j++) { m *= jz; } if (x[i] - '0' <= 9) y += m * (x[i] - '0'); else { y += m * (x[i] - '0' - 39); }; w++; m *= jz; }//end of --if (x[i] != '.') else { dot = m; } }//end of ---for if (dot != 0) y /= dot; return y; }
不足:
精度有问题,并且代码还不够精炼规范。
希望有更好的算法