2009-02-18 35 views
2

我需要將十進制值轉換爲它們的小數等效值,類似於此previous question格式重複小數作爲分數

我使用發佈在其中一個答案中的代碼作爲起點,因爲它大部分都是我所需要的。

string ToMixedFraction(decimal x) { 
int whole = (int) x; 
int denominator = 64; 
int numerator = (int)((x - whole) * denominator); 

if (numerator == 0) 
{ 
    return whole.ToString(); 
} 
while (numerator % 2 == 0) // simplify fraction 
{ 
    numerator /= 2; 
    denominator /=2; 
} 
return string.Format("{0} {1}/{2}", whole, numerator, denominator); 
} 

正如我所說,這個代碼工作正常的大部分,但我需要採取共同的重複十進制值(0.3333333),並顯示給用戶作爲1/3。

有沒有人碰巧知道這可能是怎麼做到的?

回答

4

http://mathforum.org/library/drmath/view/61579.html

以在重複部分作爲分子的數字位數,取9具有重複相同數量的數字並減少分數。

例如,.3的重複與3/9相同。通過gcd(在這種情況下爲3)分兩邊來減少,你就得到1/3。

如果您可以從終止小數中提取重複小數,您需要執行一些額外的數學運算,例如: 0.133333333。

3

我在中學學到的技術:

x = 0.33333 
10 x = 3.33333 

10x - x = 3.3333 - .3333 

9x = 3 

x = 3/9 

Reduce 3/9 to 1/3.