[英]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.625
從10
轉換為2
。
0.625
乘以2
。 0.625 => 1.25
"" + "1" = "1"
。 擦除int部分1.25 => 0.25
0.25
大於0
。 重復
0.25
乘以2
。 0.25 => 0.5
"1" + "0" = "10"
。 擦除int部分。 0.5 => 0.5
0.5
大於0
。 重復
將0.5
乘以2
。 0.5 => 1.0
存儲整數部分並從數字中刪除。 將int部分存儲在字符串"10" + "1" = "101"
。 擦除int部分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_0011"
,其中_
后面的部分在重復。 不幸的是,由於浮點類型的准確性和計算錯誤,沒有簡單的方法來理解它。 因此對於以2
0.1
底的數字0.1
,您將得到類似的結果。
00011001100110011001100110011001100
在這里查看此問題的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.