我有一个代表一个度量单位的类,其中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类上的其他一些方法做些什么来使这个更清晰并保持高性能吗?
答案 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厘米”。