The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Количество цифр в int,long,double"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Количество цифр в int,long,double"
Сообщение от Sasha_Ka Искать по авторуВ закладки on 20-Июл-01, 15:30  (MSK)
Здравствуйте, не подскажете есть ли в системе хеадер в котором определен %subj% что то типа limits.h ....  
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Количество цифр в int,long,double"
Сообщение от XMan Искать по авторуВ закладки on 24-Июл-01, 00:03  (MSK)
По идее нет и быть не должно.
В Linux кажись так:
int - 32 байта
long - 64 байта
double - 10 байт (если правильно помню), но на разных архитектурах может изменяться.
Связано это с разрядностью регистров процессора и сопроцессора.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Количество цифр в int,long,double"
Сообщение от Sasha_Ka Искать по авторуВ закладки on 24-Июл-01, 12:58  (MSK)
Да я это понимаю ...
но как мне решить допустим такую проблему:
char *str = new char [???? + 1];
sprintf(str,"%d",<мое любимое число>);
не ужели, не где, в системе не описано сколько, надо выделить памяти ???????
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Количество цифр в int,long,double"
Сообщение от lexa emailИскать по авторуВ закладки on 24-Июл-01, 16:20  (MSK)
d = va_arg( ap, int );
if( d == 0 ) {
n = 1;
} else if( d < 0) {
n = 2   ( int )log10( abs( d ) );
} else {
n = 1   ( int )log10( d );
}
query = ( char* )remem( query, n ); // пямять выдели
sprintf( query, "%s%d", query, d );
я делал вот так для создания запроса в SQL, аналогично можно сделать и с другими типами (целыми), но вот как быть с плавающей точкой - пока непридумал ...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Количество цифр в int,long,double"
Сообщение от Sasha_Ka Искать по авторуВ закладки on 25-Июл-01, 17:08  (MSK)
Да это конечно выход но .....
не проше ли просто определить дефайне
#define MAX_INT 10
  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "RE: Количество цифр в int,long,double"
Сообщение от Cheshir emailИскать по авторуВ закладки on 27-Июл-01, 15:11  (MSK)
все, в общем, просто - надо разделить целую и дробные части (floor), потом взять ln(дробная)/ln(0.1) и прибавить целую...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "RE: Количество цифр в int,long,double"
Сообщение от romanSA Искать по авторуВ закладки on 09-Авг-01, 11:07  (MSK)
Судя по фрагменту кода, ты пользуешься C++.
В этом случае можно предложить следующее:

#include <strstream>

double a = 3.1415926;

ostrstream os;
os << a;

os.str () будет содержать значение 3.1415926 в текстовом виде. При желании можно задать практически любой формат (см. справочники по C++).

P.S. Можно использовать и ostringstream (заголовок <sstream>), но он есть не во всех реализациях C++.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Количество цифр в int,long,double"
Сообщение от Cheshir emailИскать по авторуВ закладки on 25-Июл-01, 11:54  (MSK)
Народ, че вы издеваетесь над человеком? Все гораздо проще:
char* c=new char[sizeof(double,int,float - чего хошь)+1(а зачем +1???)]
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Количество цифр в int,long,double"
Сообщение от lexa Искать по авторуВ закладки on 25-Июл-01, 16:20  (MSK)
очень в этом неуверен: например, бывает такое число 65535. Столько тут цифр - прально 5! и массив нать выделить под 6! а если сказать sizeof( int ) - то получим максимум 4! так что неувязочка :(
p.s. (но в 65535 - эт конечно непредел для int святое дело, но самый простой пример ...)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: Количество цифр в int,long,double"
Сообщение от Cheshir emailИскать по авторуВ закладки on 26-Июл-01, 12:14  (MSK)
аааа :))) ну так и сразу надо говорить :) я-то другое подумал :))) ну тогда есть маленько иные варианты...

1) обычно люди не извращаются, делают достаточно ёмкий буфер и после циферок втыкают нолик;

2) можешь попробовать воспользоваться sprintf - он тебе как надо навыводит, но туда тоже надо длину массива, однако тут можно задать заранее, скока циферок тебе надо;

3) еще можно немного математики (этот вариант - с целыми, однако могешь испоганить):
если в библиотеке есть 10-ный логарифм, то так:
len=log(число)+1;
если нет, то так:
len=ln(число)/ln(10)+1;

Я, правда, обычно пользуюсь 1-м способом, иногда, если с плавающей точкой, вторым :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "RE: Количество цифр в int,long,double"
Сообщение от Арлекин Искать по авторуВ закладки on 13-Авг-01, 17:46  (MSK)
Коллеги, объясните, для какого такого аппарата пишется упоминаемый софт ?
Или экономия на каждом байте - пунктик ?
При правильной организации классов ( С   ) память выделяется и уничтожается по мере необходимости.
В данном случае почему бы не выделить ну 64 байта, например, и не морочить себе башку ! Ради экономии десятка байт считать логарифмы ????? Увольте !
Я еще понял бы если это пишется под спецпроцессоры, где памяти всего по 512 байт, но во всех остальных случаях - это программирование ради искусства ( или контрольная работа ).
Сорри.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру