URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 85
[ Назад ]

Исходное сообщение
"Количество цифр в int,long,double"

Отправлено Sasha_Ka , 20-Июл-01 15:30 
Здравствуйте, не подскажете есть ли в системе хеадер в котором определен %subj% что то типа limits.h ....  

Содержание

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

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

"RE: Количество цифр в int,long,double"
Отправлено lexa , 24-Июл-01 16:20 
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, аналогично можно сделать и с другими типами (целыми), но вот как быть с плавающей точкой - пока непридумал ...

"RE: Количество цифр в int,long,double"
Отправлено Sasha_Ka , 25-Июл-01 17:08 
Да это конечно выход но .....
не проше ли просто определить дефайне
#define MAX_INT 10

"RE: Количество цифр в int,long,double"
Отправлено Cheshir , 27-Июл-01 15:11 
все, в общем, просто - надо разделить целую и дробные части (floor), потом взять ln(дробная)/ln(0.1) и прибавить целую...

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

#include <strstream>

double a = 3.1415926;

ostrstream os;
os << a;

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

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


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

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

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

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

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

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

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


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