Разделение double на 2 части (целая и дробная) - C (СИ)
Формулировка задачи:
Есть 3 типа: bool znak; // Хранит знак если число в интервале ( -1 < n < 0 ) Т.к. если -0.1 преобразовать в long, то минус не сохранится. Для этого мы его сохраняем // true минус false плюс long a; // Целая часть unsigned short b; // Дробная часть И есть ещё 2 типа, которые нужно преобразовать: double result_one = 1.3; double result_two = -0.1; И вот c & e нужно разделить на 2 типа, как это сделать? // У меня вот есть пример, НО ... if ((-1 < result_one) && (result_one < 0)) znak = 1; // Прекрасно сохраняет знак a = (long)result_one; // ТУТ ПРОБЛЕМА! 1.3 округляет до 2 b = (unsigned short)(result_one - (double)(a)) * 10000; // По логике если целая часть нормально преобразует, то эта строчка сработает нормально ( НО ЭТО НЕ ТОЧНО ) // А с -0.1 выводит просто -0 А для вывода на экран использовать обратное преобразование: // оно работает нормально double _converter(bool znak, long a, unsigned shor b) { double result = ((double)b / 10000) + (double)abs(a); return znak ? (-1 * result) : (result); }
Решение задачи: «Разделение double на 2 части (целая и дробная)»
textual
Листинг программы
double b = 1.3; long a = b; long c = (long)(b * 100000) % 100000;
Объяснение кода листинга программы
- Объявляется переменная типа double с именем
b
и значением 1.3. - Присваивается переменной типа long с именем
a
значение переменнойb
. - Вычисляется значение выражения (long)(b * 100000) % 100000, приводимого к типу long с именем
c
. - Полученное значение присваивается переменной
c
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д