2010-08-20 53 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

您確定要這麼做嗎?

任何與工程BOT背景將改爲「7釐米」爲「約七釐米」和「7.00釐米」「七釐米至最接近的毫米」。

+0

這是一個人爲的例子。實際上,我從XHTML文檔解析CSS和寫作,表示與單位像PX的數值類,EM釐米,在,%等。所以,是的,我想7釐米,不7.0釐米。 – mattmc3 2010-08-20 02:49:19

相關問題