13

我确信这是一个非常简单的问题,但我是 VB.NET 的新手,所以我遇到了问题。

我有一个Decimal变量,我需要将它分成两个单独的变量,一个包含整数部分,一个包含小数部分。

例如,对于 x = 12.34,您最终会得到 ay = 12 和 az = 0.34。

是否有一个很好的内置功能可以做到这一点,还是我必须尝试手动解决?

4

4 回答 4

21

您可以使用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
于 2008-12-12T10:46:03.173 回答
5

(正如 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 版本。

于 2008-12-12T10:47:04.047 回答
2

简单地:

DecimalNumber - Int(DecimalNumber)
于 2016-03-21T05:53:37.843 回答
0

当数字大于零或小于零时,数字的小数部分和小数部分具有不同的意义。因此,您必须考虑这两种情况。我建议使用以下代码:

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,分别将任何小数四舍五入为最小和最大连续整数。

于 2021-06-06T11:21:17.470 回答