Лучший способ получить целое число часть десятичного числа


каков наилучший способ вернуть всю числовую часть десятичного числа (в c#)? (Это должно работать для очень больших чисел, которые могут не вписываться в int).

GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324

цель этого: я вставляю в десятичное (30,4) поле в БД и хочу убедиться, что я не пытаюсь вставить число, чем слишком долго для поля. Определение длины всей числовой части десятичной части является частью этой операции.

6 68

6 ответов:

кстати, ребята, (int)Decimal.MaxValue будет переполняться. Вы не можете получить часть "int" десятичного числа, потому что десятичное число слишком велико, чтобы поместить его в поле int. Просто проверить... его даже слишком большой для долго (Int64).

Если вы хотите бит десятичного значения слева от точки, вам нужно сделать это:

Math.Truncate(number)

и возвращает значение as... Десятичный или двойной.

edit: усечение, безусловно, правильная функция!

Я думаю

зависит от того, что ты делаешь.

например:

//bankers' rounding - midpoint goes to nearest even
GetIntPart(2.5) >> 2
GetIntPart(5.5) >> 6
GetIntPart(-6.5) >> -6

или

//arithmetic rounding - midpoint goes away from zero
GetIntPart(2.5) >> 3
GetIntPart(5.5) >> 6
GetIntPart(-6.5) >> -7

по умолчанию всегда первое, что может быть сюрпризом, но очень хорошо.

ваш явный бросок будет делать:

int intPart = (int)343564564.5
// intPart will be 343564564

int intPart = (int)343564565.5
// intPart will be 343564566

из того, как вы сформулировали вопрос, похоже, что это не то, что вы хотите - вы хотите, чтобы пол его каждый раз.

Я бы сделал:

Math.Floor(Math.Abs(number));

также проверьте размер ваш decimal - они могут быть довольно большими, так что вам может понадобиться использовать long.

вам просто нужно бросить его, как такого:

int intPart = (int)343564564.4342

Если вы все еще хотите использовать его в качестве десятичного в дальнейших вычислениях, то математика.Усечение (или, возможно, математика.Пол, если вы хотите определенное поведение для отрицательных чисел) - это функция, которую вы хотите.

очень простой способ разделить значение и его значение дробной части.

double  d = 3.5;
int i = (int)d;
string s = d.ToString();
s = s.Replace(i + ".", "");

s-дробная часть = 5 и
i - значение в виде целого числа = 3

   Public Function getWholeNumber(number As Decimal) As Integer
    Dim round = Math.Round(number, 0)
    If round > number Then
        Return round - 1
    Else
        Return round
    End If
End Function