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

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

modf, modff, modfl — разделение числа на целую и дробную части

double modf (double x, double *с);
float modff (float x, float *с);
long double modfl (long double x, long double *с);

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

Дробная часть аргумента x.

Функция разделяет аргумент Х на целую и дробную части.

Причем в функции truncf аргументы и возвращаемое значение задаются типом float, точность которого не меньше шести значащих десятичных цифр, а разрядность — 32.

В функции trunc аргументы и возвращаемое значение задаются типом double, точность которого не меньше десяти значащих десятичных цифр, а разрядность — 64.

В функции truncl аргументы и возвращаемое значение задаются типом long double, точность которого не меньше десяти значащих десятичных цифр, а разрядность — 80.

В примере число 127.33 разделяется на целую и дробные части с помощью функций modf, modff, modfl и результат выводится на консоль.

Аргумент: 127,33
modff: целая часть 127.0, дробная часть 0.33002
modf : целая часть 127.0, дробная часть 0.33000
modfl : целая часть 127.0, дробная часть 0.33000

Как на C можно выделить целую часть числа. И как можно округлить число до ближайшего целого?

1 ответ 1

Хотите целую часть? — Сделайте явное приведение типов:

Хотите узнать дробную часть? Разделите число на него же, но после приведения типов и проанализируйте остаток от деления через if-else блок: сможете своим способом округление сделать.

Или не забывайте про библиотеку math. C++ style:

Дано const auto foo = 13.42 Я хотел бы получить дробную часть чисел, так .42

Я склоняюсь только к использованию fmod лайк: fmod(foo, 1.0)

Читайте также:  Все стикеры вк бесплатно расширение

Но я мог бы просто сделать foo / static_cast (foo) — 1.0 Или, может быть, какой-то другой мистический метод.

Будет ли мотивация для меня не просто использовать fmod ?

Решение

Два способа, которые я могу придумать: либо бросок, либо округление std::floor

Quick Bench Result показывает fmod Подход как самый медленный вариант, а бросок как самый быстрый: QuickBench