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

相关问题