Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Перевод float в 2 переменные


Автор: _nIx_ 11.9.2006, 17:26
В общем , например , имеется    float X1 = 16.15.   Как вынести из нее,все что стоит до точки в одну переменную, и все что стоит после точки в другую переменную?  smile   smile Help.

Автор: CaptainFlint 11.9.2006, 17:32
Смотря какие ограничения на величину числа. Если числа небольшие, подойдёт простейший вариант:
Код
float X1 = 16.15;
float X1_int = (int)16.15;
float X1_frac = X1 - X1_int;

В противном случае придётся, наверное, пользоваться функциями из math.h для взятия целой/дробной части.

Автор: Athlon 11.9.2006, 17:37
если не ошибаюсь есть такая функция trunc, которая выделяет целую часть, что-то подобное:
Код

# include<math.h>
//..........................
float X1 = 16.15;
int X_before = trunc(X1);
float X_after = X1 - X_before;

P.S. а самый верный способ посмотреть в MSDN!

Автор: Damarus 11.9.2006, 17:46
Цитата(_nIx_ @  11.9.2006,  18:26 Найти цитируемый пост)
В общем , например , имеется    float X1 = 16.15.   Как вынести из нее,все что стоит до точки в одну переменную, и все что стоит после точки в другую переменную?      Help.

Код

// crt_modf.c

#include <math.h>
#include <stdio.h>

int main( void )
{
   double x, y, n;

   x = -14.87654321;      /* Divide x into its fractional */
   y = modf( x, &n );     /* and integer parts            */

   printf( "For %f, the fraction is %f and the integer is %.f\n", 
           x, y, n );
}

Автор: _nIx_ 13.9.2006, 10:31
Да, спс всем......  smile  Только вот еще одна проблемка осталась..... Как остаток от дробного,напр. 0.15 
преобразовать в целое?  smile  С помощью static_cast неполучается......  smile   smile 

Автор: Sceptik 13.9.2006, 11:02
_nIx_, а как ты себе это представляешь? smile

Автор: CaptainFlint 13.9.2006, 11:03
Цитата(_nIx_ @  13.9.2006,  11:31 Найти цитируемый пост)
Как остаток от дробного,напр. 0.15 преобразовать в целое?

Не понял. Какое конкретно целое число нужно получить из дробного 0.15?

Автор: vinter 13.9.2006, 11:36
Цитата

Не понял. Какое конкретно целое число нужно получить из дробного 0.15?

наверное 15.. просто домножай на 10 в степени сколько у тебя цифр..

Автор: _nIx_ 13.9.2006, 11:40
Черт,перечитал свой пост,в общем обяснил я коряво.  smile  В общем,у меня остается остаток от деления, ну например 0.15, который затем надо использовать для индексации массива. Так вот соответственно мне надо  перевести 0.15 в целое, то есть то что стоит после точки.  smile   integer = static_cast< int >( 0.15 ); естественно дает то что стоит до точки....  smile 

Автор: Sceptik 13.9.2006, 11:56
_nIx_, хм.. юзай std::map  с ключом который твой остаток.

Автор: bsa 13.9.2006, 20:30
_nIx_, понимаешь в чем дело, целое на то и целое, что у него нет дробной части. И если ты пытаешься преобразовать 0.15 к целому, ты получаешь (и вполне закономерно) результат 0. Если тебе из 0.15 надо получить целое число 15, то в этом случае просто умножаешь на 100: int i = (int)(0.15 * 100);
Если же тебе надо 0.15 преобразовать к 1, а 0.5 к 10-ти, то тут логичнее уже использовать std:map... Но что-то мне подсказывает, что ты не то с самого начала делаешь. В моей практике такие задачи (использовать дробную часть в качестве индекса) не встречались, если честно.

Автор: zkv 13.9.2006, 23:10
Цитата(bsa @  13.9.2006,  20:30 Найти цитируемый пост)
Но что-то мне подсказывает, что ты не то с самого начала делаешь.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)