Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 00:16   #1
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
Восклицание Округлить число в Си

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

Код:
#include <stdio.h>

int main()
{
     long double freq = 0.000025700392156862743;
     
     double neww = ((freq*100)*100000);

     printf("%f", neww);
     
     // Получаю 257.003922
     
	puts("\r\n");
     
     return 0;
}
После выплнения получаю 257.003922.
Потом пытаюсь просто из 257 сделать 0.0000257.

Код:
#include <stdio.h>

int main()
{
     float neww = 257/10000000;

     printf("%f", neww);
     
	puts("\r\n");
     
     return 0;
}
В результате получаю 0.000000

СОбственно вопрос, как мне из 0.000025700392156862743 сделать 0.0000257?

Заранее благодарен
dem66 вне форума Ответить с цитированием
Старый 13.02.2013, 00:20   #2
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

printf("%.7f", neww);

Так должно сработать, проверяй.

Работающий код таков:
Код:

#include <stdio.h>

int main()
{
     float neww = 0.000025700392156862743;

     printf("%.7f", neww);
     
	puts("\r\n");
     
     return 0;
}

Последний раз редактировалось Cynically; 13.02.2013 в 00:27.
Cynically вне форума Ответить с цитированием
Старый 13.02.2013, 00:31   #3
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Код:
#include <stdio.h>

int main()
{
     float neww = 257/10000000;

     printf("%.7f", neww);

	puts("\r\n");
     
     return 0;
}
Неа

0.0000000
dem66 вне форума Ответить с цитированием
Старый 13.02.2013, 00:34   #4
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Код:
#include <stdio.h>

int main()
{
     float neww = 257.0/10000000.0;

     printf("%.7f", neww);

	puts("\r\n");
     
     return 0;
}
Либо так. Чуть выше такой же работающий пример я вам запостил.
Cynically вне форума Ответить с цитированием
Старый 13.02.2013, 00:47   #5
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Все работает, спасибо. А как мне бы это дело обратно в переменную записать?

Пытаюсь сделать это вот так
Код:
char buffer[255];
     float j;
     j = sprintf(buffer, "%.7f", neww);
     
     
     printf("%f", j);
Получаю 9.000000

Последний раз редактировалось dem66; 13.02.2013 в 01:10.
dem66 вне форума Ответить с цитированием
Старый 13.02.2013, 01:15   #6
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

И? Все правильно ж вывелось... 0 + . + 7знаков после точки = 9 символов записано
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 13.02.2013, 01:20   #7
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Ааа, sprintf возвращает количество знаков?

Делаю вот так
Код:
#include <stdio.h>

int main()
{
     float neww = 0.000025700392156862743;

     printf("%.7f", neww);
     puts("\r\n");
     
     char buffer[255];
     float j;
     j = sprintf(buffer, "%.7f", neww);
     
     
     printf("%f", buffer);
	 puts("\r\n");
     
     return 0;
}
Получаю
Код:
bash-4.1$ wine test.exe
0.0000257

-0.000000
Скажите как мне записать этих 0.0000257 в другую переменную?
dem66 вне форума Ответить с цитированием
Старый 13.02.2013, 01:33   #8
Cynically
Пользователь
 
Регистрация: 05.01.2013
Сообщений: 60
По умолчанию

Решение вашей проблемы.

Код:
#include <stdio.h>

int main()
{
     double freq = 0.000025700392156862743;
     double neww = freq;

     printf("%.7f", neww);
     
	 puts("\r\n");
     
     return 0;
}
Cynically вне форума Ответить с цитированием
Старый 13.02.2013, 11:26   #9
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

И в чем же собственно тут решение? В том что тупо перекопировали одну переменную в другую?

Повторюсь, мне нужно в другую переменную записть уже готовый результат, тоисть то число обрезаное после точки до 7-ми знаков
dem66 вне форума Ответить с цитированием
Старый 13.02.2013, 11:33   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Повторюсь, мне нужно в другую переменную записть уже готовый результат, тоисть то число обрезаное после точки до 7-ми знаков
Умножить число на 10^7, применить floor(), поделить на 10^7. Это будет примерно требуемое число.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pascal:округлить число nickolaeff Помощь студентам 2 09.06.2012 09:39
Как округлить вещественное число до 2 знаков после запятой roxy7 Microsoft Office Excel 2 06.12.2011 22:15
время округлить и перевести в число smrtipathaka Microsoft Office Excel 3 04.04.2011 12:08
как округлить число до десятой? StdentOfCollege Общие вопросы Delphi 4 05.04.2010 19:55
Как округлить число до сотых в Edit xxxsas Общие вопросы C/C++ 3 25.01.2009 09:04