我该如何检查.NET十进制值是否为整数?

时间:2010-08-20 02:30:19

标签: .net vb.net decimal

我有一个代表一个度量单位的类,其中Decimal为数字。为了简化这个例子的事情,让我们说我代表厘米。我想为这个类实现一个ToString()方法。问题是,如果数值是整数,我只想将小数显示为整数。否则,我想把它保持为小数。因此,例如,10.5D厘米将显示为“10.5cm”,但7.0D厘米应显示为“7cm”。我希望这个快速而简单易读。我有一个有效的解决方案,但似乎应该有更好的方法。

这是一个人为的例子,展示了我的第一个问题:

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 个答案:

答案 0 :(得分:3)

您可以尝试:

decimal.Truncate(myDecimal) == myDecimal

这可能足以满足您的目的。但是,这是一个复杂的问题;简单地使用System.Decimal并没有消除与浮点表示相关的所有问题。代码示例here就是一个例子。

答案 1 :(得分: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

答案 2 :(得分:0)

你确定要这样做吗?

任何具有工程背景的人都会将“7厘米”视为“约7厘米”,将“7.00厘米”视为“距离最近的毫米7厘米”。

相关问题