2010-08-20 3 views
4

숫자로 Decimal 인 측정 단위를 나타내는 클래스가 있습니다. 이 예제의 작업을 단순화하기 위해 센티미터를 나타냅니다. 이 클래스의 ToString() 메서드를 구현하고 싶습니다. 문제는 숫자 값이 정수인 경우 정수로 소수점을 표시하고 싶습니다. 그렇지 않으면 소수로 유지하고 싶습니다. 예를 들어 10.5D 센티미터는 "10.5cm"로 표시되지만 7.0D 센티미터는 "7cm"로 표시되어야합니다. 나는 이것을 빠르고 쉽게 읽을 수 있기를 바랍니다. 나는 실용적인 해결책을 가지고 있지만, 더 좋은 방법이 있어야하는 것처럼 보입니다..NET 소수 값이 정수인지 어떻게 확인해야합니까?

는 여기에 첫 균열을 보여주는 인위적인 예입니다 :

Public Property Units As String = "cm" 
Public Property NumericValue As Decimal = 10.5D 

Public Overrides Function ToString() 
    Dim num As String = If(Me.NumericValue = Decimal.Ceiling(Me.NumericValue), _ 
          Decimal.ToInt32(Me.NumericValue).ToString(), _ 
          Me.NumericValue.ToString()) 
    Return num + Me.Units 
End Function 

내가 Me.NumericValue = Decimal.Ceiling(Me.NumericValue)와 조금 불편 해요. 더 나은 방법에 대한 의견? String.Format 또는 Decimal 클래스의 다른 메서드를 사용하여이 코드를 명확하게 만들고 성능을 유지할 수 있습니까?

답변

3

당신은 시도 할 수 있습니다 : 이것은 당신의 목적을 위해 충분히 좋은 수 있습니다

decimal.Truncate(myDecimal) == myDecimal 

. 그러나 이것은 복잡한 문제입니다. 단순히 System.Decimal을 사용하면 부동 소수점 표현과 관련된 모든 문제가 제거되지 않습니다. 이 코드 샘플 here은 중요한 사례입니다.

0

다음은이 작업을 수행 할 수

Public Overrides Function ToString() 
     If (Me.NumericValue - Math.Round(Me.NumericValue, 0) > 0) Then 
       Return String.Format("{0:###,###,##0.00}{1}", Me.NumericValue, Units); 
     Return String.Format("{0:###,###,##0}{1}", Me.NumericValue, Units) 
    End Function 
0

당신이 확실 또 다른 방법? enginerring 배경

사람은 "가장 가까운 밀리미터에 칠cm"로 "약. 칠cm"와 "7.00cm"로 "7cm"를 읽습니다.

+0

인위적인 예입니다. 실제로 XHTML 문서에서 CSS를 파싱하고 px, em, cm, in, % 등의 단위로 숫자 값을 나타내는 클래스를 작성합니다. 그렇기 때문에 7cm가 아니라 7.0cm가 필요합니다. – mattmc3

관련 문제