C# 如何将10进制的小数转换为C进制的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 (

在C语言中,我找不到任何好的例子来说明如何将十进制小数从以10为基数转换为以K为基数#

我在想

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.5
  • 0.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”
    ,其中
    后面的部分重复。不幸的是,由于浮点类型的准确性和计算中的错误,并没有容易理解的方法。因此,对于base
    2
    中的number
    0.1
    ,您将得到如下结果

    00011001100110011001100110011001100
    
    看看这个问题的解决办法