我怎么知道小数是否终止?

时间:2012-01-20 02:05:17

标签: c# algorithm class

我正在创建一个程序,孩子们必须将小数值(I.E. 0.xxxx - precision 4)转换为分数。

我需要知道分数是否终止,我的意思是:

1/9 ~ 0.111111/1000 = 0.111

我正在创建Fraction课程,但我不知道如何区分这两种情况。

public class Fraction
{
    #region Fields

    private int _numerator;
    private int _denominator;

    #endregion

    #region Properties

    public int Numerator
    {
        get { return _numerator;}
        set { _numerator = value;}
    }

    public int Denominator
    {
        get { return _denominator;}
        set { _denominator = value;}
    }

    public decimal DecimalValue
    {
        get { return (decimal)_numerator / _denominator; }
    }

    #endregion

    #region Constructors

    public Fraction() { }
    public Fraction(int numerator, int denominator)
    {
        this.Numerator = numerator;
        this.Denominator = denominator;
    }

    #endregion
}
你能帮帮我吗? 提前谢谢。

3 个答案:

答案 0 :(得分:11)

找出分母的素因子化。

如果所有素数因子都是2或5,则它将具有有限的十进制表示。

如果它的素数因子不是2或5,那么它将是一个重复的小数。

(这是因为10的素因子是2和5。)

编辑 - 并检查numerator % denominator是否为0,正如Stefan H指出的那样。

答案 1 :(得分:3)

我没有对此进行详尽的分析来证明或反驳以下内容,但是从我的头脑中看,以下内容似乎适用于整数......

如果没有剩余部分,那么您无需担心问题。 如果有一个余数且分母具有2和5之外的因子,那么你将有一个重复的分数。

如果分母是小数,则可能需要稍微调整一下这些规则。

希望这有帮助。

答案 2 :(得分:0)

如果我正确解释,您希望将分数转换为重复小数,并且您在计算重复部分时遇到问题。

Here's a good explanation of how to do that.