在VB.NET中如何分割一个十进制数

13

我相信这是一个非常简单的问题,但我刚接触VB.NET,所以我有些困惑。

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

例如,对于 x = 12.34,您需要得到 y = 12 和 z = 0.34。

是否有一个好用的内置函数可以做到这一点,还是我必须手动计算?

4个回答

21
您可以使用 Math.Truncate(decimal) 函数并将其从原始值中减去。请注意,如果输入是小数(例如-1.5 => -1,-.5),则两个部分都会得到负值。

编辑:这是 Eduardo 代码的另一个版本,其中始终使用 decimal:

Sub SplitDecimal(ByVal number As Decimal, ByRef wholePart As Decimal, _
                 ByRef fractionalPart As Decimal)
    wholePart = Math.Truncate(number)
    fractionalPart = number - wholePart
End Sub

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版本。


十进制数可以远远超出整数(和长整数)的范围。 - Jon Skeet

1

简单来说:

DecimalNumber - Int(DecimalNumber)

我请求您在回答中增加更多的上下文信息。仅有代码或链接的答案很难理解。如果您能在帖子中添加更多信息,将有助于提问者和未来的读者。 - RBT
这个解决方案只适用于正数。应该是DecimalNumber - Int(Math.Truncate(DecimalNumber))。 - Leszek Jezierski

1
一个数字的小数部分和整数部分在数字大于零或小于零时具有不同的意义。因此,您必须考虑这两种情况。 我建议使用以下代码:
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 holdes 0.067,int1保持13。 Floor和Ceiling分别将任何小数四舍五入为最低和最高的连续整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接