2012-01-20 4 views
3

저는 아이들이 십진수 값 (I.E. 0.xxxx - precision 4)을 분수로 변환해야하는 프로그램을 만들고 있습니다.10 진수가 종료되는지 어떻게 알 수 있습니까?

나는 분수가 종료 여부를 알 필요가 아닌지, 내 말은 :

1/9 ~ 0.111하지만 111/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 
} 

나를 도와 줄 수 있습니까? 미리 감사드립니다. , ...

에는 나머지가없는 경우

+0

는 다음 분모는 정밀도에 따라 0 또는 매우 거의 0이다. 0을 확인 하시겠습니까? – MyStream

+0

죄송합니다. 분수가 0.1 회 반복되는지 확인하려고하십니까? 0.111111처럼 ...? 또는 결과 분수가 실제로 무한대의 표현이어야하는지 파악하려고합니까? 나는 조금 혼란 스럽다. – blahman

+0

@blahman 두 번째 하나 –

답변

11

분모의 소수 분해를 찾습니다.

모든 소수 요소가 2 또는 5이면 10 진수로 표현됩니다.

2 또는 5가 아닌 소수 요소가있는 경우 반복되는 소수가됩니다. 스테판 H가 지적으로, 그리고 numerator % denominator가 0이 있는지 확인 -

편집

는 (10의 소인수가 2와 5를하기 때문에 그것은 작동).

+3

불완전한 것 같습니다 ... 14/7에는 되풀이 소수점이 없습니다. 0 –

+0

과 똑같은 분자 모눈 분모에 대한 검사가 누락되었습니다. 따라서 대답이 불완전한 이유는 무엇입니까? 그것이 내가 지적한 전부입니다. –

+1

감사합니다! 여기에 코드가 있습니다. if (Numerator % Denominator == 0) false를 반환합니다. var primes = 분모.프라임(); foreach (소수의 int n) { if (n! = 2 && n! = 5) return true; } false를 반환합니다. –

3

나는 증명 또는 다음을 반증이에 대한 철저한 분석을하지했지만, 내 머리 위로 떨어져 다음은 정수를 위해 작동하는 것 같다 그러면 걱정할 문제가 없습니다. 나머지가 있고 분모의 요소가 2와 5가 아닌 경우 분수가 반복됩니다.

분모가 십진수이면 이러한 규칙을 약간 조정하면됩니다.

희망이 도움이됩니다.

+0

그의 코드는 numerator와 denominator가 정수가 아닌 소수 부분을 보여줍니다. 그냥 주목 해. – doogle

관련 문제