2009-12-01 9 views
1

문자열에 저장된 분수 (예 : "2/13")를 이중으로 구문 분석하려고합니다. 나는 파싱 코드를 작성할 수 있지만,이 코드를 어디에서 사용해야 만할까요? 가장 좋은 방법은 double.Parse() 함수를 사용하는 것입니다. 그것을 할 수 있습니까? double.Parse()를 확장 메서드를 작성하는 방법으로 사용할 수없는 경우? 아니면 다른 방법일까요?두배로 분수 파싱

분수의 문자열 표현에서 double 로의 변환이 (사용자가 처음 입력 할 때) 한 번 작업이 될 것이므로 분수 문자열을 버리므로 분수 클래스를 작성하고 싶지 않습니다. .

답변

6

"... 부분 문자열이 삭제됩니다."

문자열을 사용하고 double을 반환하는 정적 구문 분석 메서드를 사용하여 소수 클래스를 정적으로 만들 수 있습니다.

public static class Fraction 
{ 
    public static double Parse(string inValue) 
    { 
     // code to parse string 
     // and return calculated value 
    } 
} 

사용 :

double myvalue = Fraction.Parse("2/13"); 

아무 것도 (원래 값을 유지하는 데 신경 쓰지 않는,

이러한 접근 방식은 물론 가정 ... 아무것도 버리지 않고, 인스턴스화 기반으로 귀하가 yr 질문에 언급 한 것은 분수를 생성하는 데 사용 된 inital 문자열 값을 "버려두고 싶습니다").

otoh, 그 상태 (분수를 생성하는 데 사용 된 두 정수의 초기 값)를 "보류"하고 싶다면 별도의 비 정적 클래스 (사실 struct는이 경우 더 좋을 수 있습니다.)가 더 좋은 방법이 될 것입니다. 그런 다음이 구조체의 인스턴스를 사용하는 미래의 산술 연산이 나눗셈 연산에서 얻은 약간 덜 정확한 반올림 된 이중 대신에이 필드에 저장된 원래의 두 개의 정확한 정수 상태 값을 사용하도록 코딩 될 수 있으므로 정밀도가 손실됩니다.

4

double.Parse() 자체를 확장 방법으로 재정의 할 수는 없지만 대신 double.ParseFraction() 확장 메서드를 만들 수 있습니다. 그게 합리적인 방법으로 보인다.

+2

이러한 메서드는 정적이어야하며 정적 확장 메서드를 만들 수 없습니다. –

+0

아, 참으로. 그 생각조차하지 마라. – Thomas