代码之家  ›  专栏  ›  技术社区  ›  mattmc3

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

  •  4
  • mattmc3  · 技术社区  · 14 年前

    我有一个表示度量单位的类 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) . 有没有想过如何做得更好?在decimal类上,我是否可以对string.format或其他方法做些什么,以使它更清晰并保持性能?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Ani    14 年前

    你可以试试:

    decimal.Truncate(myDecimal) == myDecimal
    

    这对于您的目的来说可能已经足够好了。然而,这是一个复杂的问题;简单地使用 System.Decimal 并不能解决与浮点表示相关的所有问题。代码示例 here 是一个很好的例子。

        2
  •  0
  •   Tahbaza    14 年前

    这是另一种方法

        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
    
        3
  •  0
  •   James Anderson    14 年前

    你确定要这样做吗?

    任何有发动机背景的人都会把“7cm”读作“大约7厘米”,把“7.00cm”读作“7厘米到最近的毫米”。