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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> printf для double 
V
    Опции темы
dhmhd
Дата 30.10.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Возникла неоходимость выводить значение double следующим образом:
Код

2.345600e+001 -> 23.456
1.523900e+000 -> 1.5239
2.334500e+002 -> 233.45
5.678200e+003 -> 5678.2
2.974000e-001 -> 0.2974
4.310000e-002 -> 0.0431

Также нужно, чтобы знак + не отбрасывался, но я уже нашел нужный флаг для printf'а.
И еще было бы очень здорово, если бы не присходило гашение незначащих нулей. Вот так:
Код

3.700000e+001 -> 37.000
1.560000e+001 -> 15.600

Благодарю за внимание.

Это сообщение отредактировал(а) dhmhd - 30.10.2011, 16:17
PM MAIL   Вверх
Dem_max
Дата 30.10.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



наверное как то так 
Код

printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
dhmhd
Дата 30.10.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dem_max, вы меня не поняли.

Код

  float val = 2.334563;
  char str[7];
  sprintf(str, format, val);
  printf("val = %s.\n", str);
  ...


Код

val = +2.3345.


Так вот, мне нужно, чтобы, для любого val, str была, во-первых, фиксированной длинны, во-вторых, всегда со знаком. Можно ли, в принципе, сделать это через форматный вывод. Или придется формировать str самому?


Это сообщение отредактировал(а) dhmhd - 30.10.2011, 18:06
PM MAIL   Вверх
Dem_max
Дата 30.10.2011, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну а в чем проблема то ???

Код

printf ("val = %+4.4f\n", 2.334563);


Код

val = +2.3345.


Это сообщение отредактировал(а) Dem_max - 30.10.2011, 18:23


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
dhmhd
Дата 30.10.2011, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не вижу строки "+3.1416", которая как раз мне нужна...
PM MAIL   Вверх
Dem_max
Дата 30.10.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



смотри выше


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
dhmhd
Дата 30.10.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В том, что я хотел бы найти такой формат, чтобы... Или это не возможно?

Код

printf ("val = %+4.4f\n", 2.334563);
printf ("val = %+4.4f\n", 23.34563);


Код

val = +2.3346
val = +23.3456


А мне надо.
 
Код

val = +2.3346
val = +23.345

PM MAIL   Вверх
Dem_max
Дата 30.10.2011, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Опять не так ????

Код

char val[200];
char new_val[15];

Xprintf (val, "val = %+4.4f\n", 2.334563);
strncpy (new_val, val, sizeof(new_val));
new_val[14]='\0';
//result
//val = +2.3346

Xprintf (val, "val = %+4.4f\n", 23.34563);
strncpy (new_val, val, sizeof(new_val));
new_val[14]='\0';
//result
//val = +23.334


Это сообщение отредактировал(а) Dem_max - 30.10.2011, 18:48


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
dhmhd
Дата 30.10.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Костыль. Помоему.
PM MAIL   Вверх
Dem_max
Дата 30.10.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну тебя тогда не понять


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Фантом
Дата 30.10.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Воспользуйтесь таким форматом:
Код

printf ("val = %#+.5g\n", 2.334563);
printf ("val = %#+.5g\n", 23.34563);
printf ("val = %#+.5g\n", 2.300000);


P.S. Внес поправку для сохранения хвостовых нулей.

Это сообщение отредактировал(а) Фантом - 30.10.2011, 19:20
PM   Вверх
dhmhd
Дата 30.10.2011, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Фантом, почти то, что нужноsmile. Но...
Код

printf ("val = %#+.5g\n", 0.023000);

дает:
Код

val = +0.023000

А мне бы всетаки хотелось
Код

val = +0.0230


Добавлено @ 19:28
Последний вариант вполне подходит. Обрежемsmile. Я думаю, можно закрывать вопрос.

Добавлено @ 19:35
Код

snprintf(str,8, "%#+.5f", val);


Это сообщение отредактировал(а) dhmhd - 30.10.2011, 19:35
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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