代码之家  ›  专栏  ›  技术社区  ›  Tim Lentine

将重复小数格式化为分数

  •  2
  • Tim Lentine  · 技术社区  · 16 年前

    我需要将十进制值转换成它们的分数等价物,类似于 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 回复  |  直到 15 年前
        1
  •  4
  •   MSN    16 年前

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

    以重复部分的位数为分子,以相同位数的9个重复,并减少分数。

    例如,.3重复与3/9相同。将两边除以gcd(本例中为3),得到1/3。

    如果可以从终止小数中提取重复的小数,例如133333333,则需要进行一些额外的计算。

        2
  •  3
  •   abelenky    16 年前

    我在中学学到的技巧是:

    x = 0.33333
    10 x = 3.33333
    
    10x - x = 3.3333 - .3333
    
    9x = 3
    
    x = 3 / 9
    
    Reduce 3/9 to 1/3.
    
        3
  •  0
  •   Miles    16 年前

    下面是一个将浮点转换为最接近的分数(给定分母的限制)的方法: http://code.activestate.com/recipes/52317/