2008-12-12 7 views
11

Я уверен, что это очень простая проблема, но я новичок в VB.NET, поэтому у меня возникла проблема с ней.Сплит «Десятичный» в VB.NET

У меня есть переменная Decimal, и мне нужно разбить ее на две отдельные переменные: одну, содержащую целую часть, и одну, содержащую дробную часть.

Например, для x = 12.34 вы должны получить y = 12 и z = 0,34.

Есть ли красивые встроенные функции, чтобы сделать это, или я должен попробовать и выполнить его вручную?

ответ

19

Вы можете использовать Math.Truncate(decimal), а затем вычесть это из оригинала. Имейте в виду, что это даст вам отрицательное значение для обеих частей, если вход десятичного (например, -1,5 => -1, -.5)

EDIT: Вот вариант кода Эдуардо, который использует десятичное во всем:

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

(Как говорит Джон Скит), остерегайтесь того, что целочисленная часть десятичной дроби может быть больше целого, но эта функция даст вам эту идею.

Sub SlipDecimal(ByVal Number As Decimal, ByRef IntegerPart As Integer, _ 
        ByRef DecimalPart As Decimal) 
     IntegerPart = Int(Number) 
     DecimalPart = Number - IntegerPart 
    End Sub 

Используйте версию Jon, если вы используете большие цифры.

+0

Decimals может пойти путь вне диапазона Целые (и Longs) –

+0

Да, но это только идея –

0

Просто:

DecimalNumber - Int(DecimalNumber) 
+0

я прошу вас, пожалуйста, добавить еще некоторый контекст вокруг вашего ответа. Кодовые или ссылки только ответы трудно понять. Это поможет читателю и будущим читателям, если вы сможете добавить дополнительную информацию в свой пост. – RBT