格式重复十进制作为分数

时间:2009-02-18 22:27:29

标签: c# string formatting

我需要将十进制值转换为小数当量,类似于此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);
}

正如我所说,这段代码在大多数情况下工作正常,但我需要采用常见的重复十进制值(.3333333)并将其显示给用户为1/3。

有没有人碰巧知道这可能是怎么做的?

3 个答案:

答案 0 :(得分:4)

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

将重复部分中的位数作为分子,以相同的位数重复9次并减少分数。

例如,.3重复与3/9相同。通过将gcd(在这种情况下为3)除以两边来减少并得到1/3。

如果你可以从终止小数中提取重复小数,你需要做一些额外的数学运算,例如: 0.133333333。

答案 1 :(得分:3)

我在中学学到的技巧:

x = 0.33333
10 x = 3.33333

10x - x = 3.3333 - .3333

9x = 3

x = 3 / 9

Reduce 3/9 to 1/3.

答案 2 :(得分:0)

这是一个将浮动转换为最小分数的配方,给出分母的限制:http://code.activestate.com/recipes/52317/