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;
}
不足:
精度有问题,并且代码还不够精炼规范。
希望有更好的算法