Как взять целую часть от деления c
Перейти к содержимому

Как взять целую часть от деления c

  • автор:

Как взять целую часть от деления c

Для выполнения различных математических операций в библиотеке классов .NET предназначен класс Math . Он является статическим, поэтому все его методы также являются статическими.

Рассмотрим основные методы класса Math:

Abs(double value) : возвращает абсолютное значение для аргумента value

Acos(double value) : возвращает арккосинус value. Параметр value должен иметь значение от -1 до 1

Asin(double value) : возвращает арксинус value. Параметр value должен иметь значение от -1 до 1

Atan(double value) : возвращает арктангенс value

BigMul(int x, int y) : возвращает произведение x * y в виде объекта long

Ceiling(double value) : возвращает наименьшее целое число с плавающей точкой, которое не меньше value

Cos(double d) : возвращает косинус угла d

Cosh(double d) : возвращает гиперболический косинус угла d

DivRem(int a, int b, out int result) : возвращает результат от деления a/b, а остаток помещается в параметр result

Exp(double d) : возвращает основание натурального логарифма, возведенное в степень d

Floor(decimal d) : возвращает наибольшее целое число, которое не больше d

IEEERemainder(double a, double b) : возвращает остаток от деления a на b

Log(double d) : возвращает натуральный логарифм числа d

Log(double a, double newBase) : возвращает логарифм числа a по основанию newBase

Log10(double d) : возвращает десятичный логарифм числа d

Max(double a, double b) : возвращает максимальное число из a и b

Min(double a, double b) : возвращает минимальное число из a и b

Pow(double a, double b) : возвращает число a, возведенное в степень b

Round(double d) : возвращает число d, округленное до ближайшего целого числа

Round(double a, int b) : возвращает число a, округленное до определенного количества знаков после запятой, представленного параметром b

Sign(double value) : возвращает число 1, если число value положительное, и -1, если значение value отрицательное. Если value равно 0, то возвращает 0

Sin(double value) : возвращает синус угла value

Sinh(double value) : возвращает гиперболический синус угла value

Sqrt(double value) : возвращает квадратный корень числа value

Tan(double value) : возвращает тангенс угла value

Tanh(double value) : возвращает гиперболический тангенс угла value

Truncate(double value) : отбрасывает дробную часть числа value, возвращаяя лишь целое значние

Арифметические действия в языке Си

Программы работают с данными. Зачастую данные представляют собой числа. В этом уроке, как вы наверное догадались, мы будем заниматься изучением того, как и что в языке Си можно делать с числами. Начнём с арифметики.

Компилятор языка Си понимает все основные арифметические операции, которые вам известны со школы. Плюс есть несколько дополнительных.

Основные арифметические операторы языка Си.

+ оператор сложения
— оператор вычитания
* оператор умножения
% оператор взятия остатка от деления
/ оператор деления

Следующая программа иллюстрирует использование первых четырёх из них. Кстати, обратите внимание на то, как с помощью функции printf вывести на экран символ % .

Результат работы этой программы представлен на следующем рисунке.

Рис.5 Использование арифметических действий в Си.

Всё чётко и понятно. Никаких неожиданностей. А теперь попробуем получить частное двух чисел. Т.к. результат должен получиться 3.5, то res объявим как float .

Как видите, результат получился не тот, что мы ожидали. Это одна из особенностей оператора деления в языке Си.

При делении значение целого типа на значение целого типа результат тоже получается целого типа.

Так уж устроен язык Си. Поэкспериментируйте, попробуйте любые другие целые числа.

Вычислить результат целочисленного деления легко. Поделите числа и отбросьте всё, что получилось в дробной части.

Пример: Как получить результат целочисленного деления

7/2 = 3.5 → 3
11/3 = 3.66 → 3
2/5 = 0.4 → 0

Для того чтобы получить тот результат, который мы в данном случае ожидаем, одно из значений нужно сделать вещественным. Сделать это проще простого. Для этого необходимо рядом с ним в скобках записать float .

Посмотрим на нашем примере:

Теперь результат будет тот, что мы ожидали. Проделанный нами трюк называется явным преобразованием типа .

Явное преобразование (приведение) типа.

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

Листинг 4. Примеры явного преобразования типа

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

Обратите внимание, что, когда мы преобразовываем целое значение в вещественное, ничего особенного не происходит, т.к. вещественные числа включают в себя целые.

Совсем иная ситуация, когда мы от вещественного переходим к целому. При этом переходе у нас теряется вся дробная часть. Не забывайте об этом.

Картинка, показывающая различия между операциями взятие остатка, целочисленного деления и обычного деления.

Деление, целочисленное деление и остаток от деления. Отличия

Рис.2 Деление, целочисленное деление и остаток от деления.

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи:

Для удобства работы сразу переходите в полноэкранный режим

08. Вещественные числа

С целыми числа мы успешно справились, теперь нам нужно узнать о числах с десятичной дробью. Данные вещественного (double) типа используются гораздо чаще целого типа. Они необходимы в тех случаях, когда числовые значения могут содержать дробную часть. Дробная часть отделяется от целой части при помощи точки:

Считываются с консоли вещественные переменные точно также как целые, только конвертация происходит в нужный тип данных, например:

C вещественным типом данных поддерживаются точно такие же операции как и с целым типом. Но вспоминаем конспект «Операции с целыми числами», где при делении двух целых чисел, результатом также будет целое число. Приведем пример: при делении нацело 24 на 19 результатом будет число 1.

Чтобы получить точный результат с десятичной дробью, необходимо, чтобы делимое и/или делитель были типа double. Тогда деление будет происходить как в математике. Для лучшего понимания, давайте рассмотрим пример:

Если мы хотим сохранить в вещественной переменной целое число, то достаточно присвоить переменной типа double значение целочисленного арифметического выражения. Это возможно, так как множество вещественных чисел содержит в себе множество целых чисел:

Если оба операнда целые и результат записывается в переменную вещественного типа, то все равно операция будет выполняться в целых числах, так как сначала выполняется правая часть от оператора присвоения (=) и не указано явно что необходим вещественный результат. Например:

Деление будет выполнено в целых числах, а уже после этого результат будет преобразован в действительное число. Чтобы избавиться от этой проблемы, необходимо явно привести один из операндов к типу double. Чтобы привести переменную целого типа к вещественному типу, надо в круглых скобках перед именем переменной записать (double). Также, чтобы в переменной dblNum оказался правильный результат, можно одному из операндов прибавить ноль 0.0 с десятичной точкой:

В приведенном первом примере, при операции деления, сначала целое число intNum1 преобразуется в вещественное, затем данное вещественное число делится на целое число intNum2, следовательно тут деление происходит корректно без отбрасывания дробной части, то есть как мы привыкли в математике.

Во втором примере к intNum1 прибавляется вещественно число, где результат становиться вещественным числом, и далее делится на целое и получается нужное нам вещественное число.

Чтобы взять целую часть вещественного числа нужно воспользоваться приведением типов, с помощью конструкции: (int) 23.56 = 23.

Про приведение типов подробно рассмотрим после класса Math.

Работа с вещественными числами всегда чревата ошибками в точности. Особенно такие проблемы возникают при делении и умножении. Далее при тестировании программы будьте очень внимательны – в среде разработки дробную часть необходимо отделать точкой, а вот запущенной на консоль в нашей программе будем отделять дробь запятой.

Numbers_15

Даны два числа, которые вводятся в консоль построчно. Вывести в консоль их среднее арифметическое.

Получаем построчно два числа, не забываем что числа могут быть и отрицательные и вещественные, находим их сумму и найденную сумму делим на количество элементов, то есть на 2. Выводим среднее арифметическое в консоль.

Получаем вещественное число, и решаем эту задачу с помощью оператора получения остатка от деления на единицу.

Решаем эту задачу через умножение числа, отбрасывания дробной части и получения остатка от деления на десять.

Ниже приведены задания для самостоятельного решения:

Home_28. Известны объем и масса тела. Определить плотность материала этого тела.

Home_29. Известны количество жителей в государстве и площадь его территории. Определить плотность населения в этом государстве.

Home_30a. Написать консольное приложение для нахождения диаметра, длины окружности, площади круга, при введенном радиусе.

Home_30b. Написать консольное приложение для нахождения периметра и площади прямоугольного треугольника, при введенных построчно длинах сторон треугольника.

Как получить целую часть вещественного числа?

Евгений Корначев: Я вижу, что вы старательно каждого об этом спрашиваете.

Напишите свой вариант для вашего примера.

Потом я его прокомментирую.

Евгений Корначев: Тут большинство вопросов такие.

Причём в ответ на ваш комментарий выше:

  1. Это не я предлагал.
  2. Он даст double, в то время как целая часть числа — целое число.
  3. А в виде int integralPart = Math.floor(x); он вообще нерабочий.

Евгений Корначев: OK, раз своего решения у вас нет с числами произвольной точности, то напишу его я:

Для отрицательных чисел он возвращает не то, что принято в математике называть целой частью вещественного числа (просто обрезается то, что стоит после десятичной точки). Если надо по определению, то корректировка для таких случаев оставляется для ТС в качестве тривиального ДЗ.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *