Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
ANSI С/С++
(Модератор:
Вад
) > Тема:
Float
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Float (Прочитано 16029 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aleexeey
Постоялец
Offline
Float
«
:
06-12-2008 09:10 »
Здравствуйте форумчане!
Что-то нелепое на меня нашло, может и тупой вопрос,
как число (например float f = 21.43f;) преобразовать в (int i1 = 21; int i2 = 43;)
т. е. отделить целую часть от дробной.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #1 :
06-12-2008 10:01 »
Код:
//считается, что f - положительное
float f = 21.43;
//целая часть
int i1 = f;
float f2=f-i1;//тут только дробная часть от f
//дальше всё зависит от точности, которая тебе нужна
//умножаем f2 на 10, пока дробная часть не станет == 0
//тут будет дробная часть "в виде целого"
int i2=0;
for(;f2>=0.0000001;)//точность
{
f2*=10;
i2= i2*10+f2;
f2=f2-(int)f2;
}
(не тестировал
)
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #2 :
06-12-2008 10:07 »
Спа-а-а-а-а-а...*1024...сибо!!!*1024!
то что нужно!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #3 :
06-12-2008 10:10 »
для дробной части есть способ дольше, но проще - отформатировать строку, затем достать всё после точки :
(только я с CString покажу , чтоб с буфером не возюкаться
)
Код:
CString txt;
txt.Format("%f",f-(int)f);
int i2=0;
const char* p=strchr(txt,'.');
if(p)
{
i2=atoi(p+1);
}
ну и если чисто с CString :
Код:
CString txt;
txt.Format("%f",f-(int)f);
txt.MakeReverse();
txt=txt.SpanExcluding('.');
txt.MakeReverse();
int i2=atoi(txt);
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #4 :
06-12-2008 10:14 »
да мне дробную часть округлить надо!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #5 :
06-12-2008 10:16 »
int i1 = (f+.5);
или
... (int)(f+.5);
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #6 :
06-12-2008 10:24 »
Не то хотел сказать.
Код:
Float = 2.76;
result:
int1 = 2;
int2 = 8;
спасибо
Алексей1153++
за помощь, теперь все нормально!!!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #7 :
06-12-2008 10:30 »
тогда так:
f=((float)(int)(f*10+.5))/10;
или
txt.Format("%.1f",f);
«
Последнее редактирование: 06-12-2008 10:34 от Алексей1153++
»
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #8 :
06-12-2008 10:34 »
ты бы вообще цель сказал, а то какой вопрос - такой ответ )
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #9 :
06-12-2008 10:43 »
Алексей1153++
мне твой пример
Цитата: Алексей1153++ от 06-12-2008 10:16
int i1 = (f+.5);
или
... (int)(f+.5);
подошел, и работает без проблем, спасибо!
Вот что получилось:
Код:
float figure = 234.543;
int num1 = figure;
float p = figure - num1;
p *= 10;
int num2 = (int)(p+.5);
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #10 :
06-12-2008 10:45 »
вместо
float p = figure - num1;
p *= 10;
int num2 = (int)(p+.5);
сразу
int num2 = (figure - num1)*10+.5;
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #11 :
06-12-2008 10:51 »
Да, можно и так (что то не догадался)
А если округление числа с плавающей точкой так просты, то для чего в
#include <math.h>
есть такие функции как:
floorf, floor, ceil, ceilf... а?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #12 :
06-12-2008 10:54 »
ну раз есть - пользуйся ими, конечно, я просто не задумывался об этом и не применял никогда. Вообще, с округлением раз в год встречаться приходится )) А в строку распечатать удобнее форматированием
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #13 :
06-12-2008 11:01 »
Цитата: Алексей1153++ от 06-12-2008 10:54
Вообще, с округлением раз в год встречаться приходится ))
Ух ты, а я только сейчас столкнулся с округлением числа с плавающей точкой!
Поди больше 5, а то и 6 лет прошло.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Float
«
Ответ #14 :
06-12-2008 11:07 »
ура, я чаще
)
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
Aleexeey
Постоялец
Offline
Re: Float
«
Ответ #15 :
06-12-2008 11:10 »
во почему ты знал решение
а я нет
нишо поравнялись
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
ANSI С/С++
(Модератор:
Вад
) > Тема:
Float
Загружается...