C# 如何将10进制的小数转换为C进制的k进制?有什么建议吗
在C语言中,我找不到任何好的例子来说明如何将十进制小数从以10为基数转换为以K为基数# 我在想C# 如何将10进制的小数转换为C进制的k进制?有什么建议吗,c#,base,C#,Base,在C语言中,我找不到任何好的例子来说明如何将十进制小数从以10为基数转换为以K为基数# 我在想 double mynumber = 0.142857; int mybase = 4; string myNumberAsString = mynumber.ToString(); do { myNumberAsString = "0123456789"[mynumber % mybase] + myNumberAsString ; mynumber /= mybase; } while (
double mynumber = 0.142857;
int mybase = 4;
string myNumberAsString = mynumber.ToString();
do
{
myNumberAsString = "0123456789"[mynumber % mybase] + myNumberAsString ;
mynumber /= mybase;
}
while (mynumber > 0);
Console.WriteLine("# in base 4 is: " + myNumberAsString);
为了将数字的小数部分从基数10转换为基数K,必须将数字乘以
K
,直到数字中不再剩下分数。每次乘法时必须得到数字的整数部分,并在得到整数部分后删除它
double mynumber = 0.142857;
int mybase = 4;
string result = ""; // result will be stored here
while (mynumber > 0) // do multiply and get the int part until number is zero
{
mynumber *= mybase; // do multiply by base and store it in number.
result += string.Format("{0}", (int)mynumber); // store the int part.
mynumber -= (int) mynumber; // remove the int part.
}
Console.WriteLine(result);
一个简单的例子
将0.625
从基10
转换为基2
0.625
乘以2
<代码>0.625=>1.25“+”1“=“1”
中。擦除整数部分1.25=>0.25
0.25
大于0
。重复0.25
乘以2
<代码>0.25=>0.5“1”+“0”=“10”
中。删除整型部分<代码>0.5=>0.50.5
大于0
。重复0.5
乘以2
<代码>0.5=>1.0“10”+“1”=“101”
中。擦除内部部分1.0=>0.0
0.0
不大于0
。字符串现在是基2
0.625的小数部分10
的基数,通常使用字母。例如,基数16
中的数字是0,1,2,3,4,5,6,7,8,9,A、B、C、D、E、F
。在此算法中,必须将大于9
的数字替换为字母
因此,为了支持多达16进制,请稍微更改代码
while (mynumber > 0)
{
mynumber *= mybase;
result += string.Format("{0}", "0123456789ABCDEF"[(int) mynumber]); // supports up to base 16.
mynumber -= (int) mynumber;
}
您可以添加更多字母以支持更高的基数
有时你可能会得到重复的小数。例如,基数2中的数字0.1将是“0\u 0011”
,其中后面的部分重复。不幸的是,由于浮点类型的准确性和计算中的错误,并没有容易理解的方法。因此,对于base2
中的number0.1
,您将得到如下结果
00011001100110011001100110011001100
看看这个问题的解决办法