簡體   English   中英

如何在C#中將以10為底的小數轉換為以k為底的任何建議都很好

[英]How do you convert Fractional Decimals in base 10 to base k in C# Any advice would be great

我找不到如何在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.62510轉換為2

  1. 0.625乘以2 0.625 => 1.25
  2. 存儲整數部分並從數字中刪除。 將int部分存儲在字符串"" + "1" = "1" 擦除int部分1.25 => 0.25
  3. 0.25大於0 重復

  4. 0.25乘以2 0.25 => 0.5

  5. 存儲整數部分並從數字中刪除。 將int部分存儲在字符串"1" + "0" = "10" 擦除int部分。 0.5 => 0.5
  6. 0.5大於0 重復

  7. 0.5乘以2 0.5 => 1.0

  8. 存儲整數部分並從數字中刪除。 將int部分存儲在字符串"10" + "1" = "101" 擦除int部分1.0 => 0.0

  9. 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_0011" ,其中_后面的部分在重復。 不幸的是,由於浮點類型的准確性和計算錯誤,沒有簡單的方法來理解它。 因此對於以2 0.1底的數字0.1 ,您將得到類似的結果。

00011001100110011001100110011001100

這里查看此問題的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM