Лучший способ получить целое число часть десятичного числа
каков наилучший способ вернуть всю числовую часть десятичного знака (в C#)? (Это должно работать для очень больших чисел, которые могут не вписываться в int).
GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324
цель этого: я вставляю в десятичное (30,4) поле в БД и хочу убедиться, что я не пытаюсь вставить число, слишком длинное для поля. Определение длины всей числовой части decimal является частью этой операции.
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
Если вы все еще хотите использовать его в качестве десятичного знака в более поздних вычислениях, то Math.Усечение (или, возможно, математика.Пол, если вы хотите определенное поведение для отрицательных чисел) - это функция, которую вы хотите.
очень простой способ отделить значение и его значение дробной части.
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