Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод float в 2 переменные 
:(
    Опции темы
_nIx_
Дата 11.9.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



В общем , например , имеется    float X1 = 16.15.   Как вынести из нее,все что стоит до точки в одну переменную, и все что стоит после точки в другую переменную?  smile   smile Help.
PM MAIL   Вверх
CaptainFlint
Дата 11.9.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: нет
Всего: 23



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

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

Это сообщение отредактировал(а) CaptainFlint - 11.9.2006, 17:33


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
Athlon
Дата 11.9.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.1.2006
Где: Украина:: Запорож ье

Репутация: нет
Всего: нет



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

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

P.S. а самый верный способ посмотреть в MSDN!
PM MAIL ICQ   Вверх
Damarus
Дата 11.9.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(_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 );
}

PM MAIL ICQ Jabber   Вверх
_nIx_
Дата 13.9.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



Да, спс всем......  smile  Только вот еще одна проблемка осталась..... Как остаток от дробного,напр. 0.15 
преобразовать в целое?  smile  С помощью static_cast неполучается......  smile   smile 
PM MAIL   Вверх
Sceptik
Дата 13.9.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.8.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



_nIx_, а как ты себе это представляешь? smile
PM MAIL ICQ   Вверх
CaptainFlint
Дата 13.9.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: нет
Всего: 23



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

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


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
vinter
Дата 13.9.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

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

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


--------------------
Мой блог
PM MAIL WWW   Вверх
_nIx_
Дата 13.9.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



Черт,перечитал свой пост,в общем обяснил я коряво.  smile  В общем,у меня остается остаток от деления, ну например 0.15, который затем надо использовать для индексации массива. Так вот соответственно мне надо  перевести 0.15 в целое, то есть то что стоит после точки.  smile   integer = static_cast< int >( 0.15 ); естественно дает то что стоит до точки....  smile 
PM MAIL   Вверх
Sceptik
Дата 13.9.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 29.8.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



_nIx_, хм.. юзай std::map  с ключом который твой остаток.
PM MAIL ICQ   Вверх
bsa
Дата 13.9.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



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

присоединяюсь, _nIx_, может объяснишь зачем тебе все это, может тогда понятнее станет, или другой путь подскажут.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0915 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.