我确信这是一个非常简单的问题,但我是 VB.NET 的新手,所以我遇到了问题。
我有一个Decimal
变量,我需要将它分成两个单独的变量,一个包含整数部分,一个包含小数部分。
例如,对于 x = 12.34,您最终会得到 ay = 12 和 az = 0.34。
是否有一个很好的内置功能可以做到这一点,还是我必须尝试手动解决?
您可以使用Math.Truncate(decimal)然后从原始值中减去它。请注意,如果输入为十进制,这将为您提供两个部分的负值(例如 -1.5 => -1,-.5)
编辑:这是 Eduardo 代码的一个版本,它始终使用十进制:
Sub SplitDecimal(ByVal number As Decimal, ByRef wholePart As Decimal, _
ByRef fractionalPart As Decimal)
wholePart = Math.Truncate(number)
fractionalPart = number - wholePart
End Sub
(正如 Jon Skeet 所说),请注意小数的整数部分可能大于整数,但这个函数会让你明白。
Sub SlipDecimal(ByVal Number As Decimal, ByRef IntegerPart As Integer, _
ByRef DecimalPart As Decimal)
IntegerPart = Int(Number)
DecimalPart = Number - IntegerPart
End Sub
如果您使用大数字,请使用 Jon 版本。
简单地:
DecimalNumber - Int(DecimalNumber)
当数字大于零或小于零时,数字的小数部分和小数部分具有不同的意义。因此,您必须考虑这两种情况。我建议使用以下代码:
Dim dbl as double = 13.067
Dim int1 As Integer = 0
Dim fraction As Double = 0
If dbl >= 0 Then
int1 = Math.Floor(dbl)
ElseIf dbl < 0 Then
int1 = Math.Ceiling(dbl)
End If
fraction = dbl - int1
fraction 持有 0.067,而 int1 持有 13 。Floor 和 Ceiling,分别将任何小数四舍五入为最小和最大连续整数。