Показать сообщение отдельно
Старый 17.02.2006, 18:22   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

Куда более интересно преобразование чисел в строку и обратно. Для этого юзаем фунЕции:
//целые числа
itoa(исходное_число,строка_приёмник,основание_системы);
x=atoi(строка_с_числом);
//дробные:
функции перевода в строку не нашёл
x=atof(строка_с_числом);
;
Эти функции хранятся в stdlib.h
Реализацию dtoa накодил кое-как сам (есть ещё один алгоритм, но он "таинственным" образом переполняет стек; вариант ниже более устойчив):
short get_byte(double x,int p,int R){
	x=fabs(x);
	int n=R-p+1;
	short a;
	if(p>0)
 *a=int((x-int(x/pow(10,n))*pow(10,n))/pow(10,n-1 ));
	else if(p<0)
 *a=int(x*pow(10,-p))%10;
	else
 *a=-1;
	return a;
}

short get_Rlen(double x){
	char a[20];
	itoa(x,a,10);
	return strlen(a)-(x<0?1:0);
}

void dtoa(double x,char t[],int z=10,int omega=5){
	short R=get_Rlen(x);
	char b[2];
	int i;
	int j=0;
	if(x<0){
 *x=fabs(x);
 *t[0]='-';
 *j++;
	}
	for(i=1;i<=R;i++){
 *short p=get_byte(x,i,R);
 *itoa(p,b,10);
 *b[1]=0;
 *t[j]=b[0];
 *j++;
	}
	t[j]='.';
	j++;
	for(i=-1;i>=-omega;i--){
 *short p=get_byte(x,i,R);
 *itoa(p,b,10);
 *b[1]=0;
 *t[j]=b[0];
 *j++;
	}
	t[j]=0;
}
void dtoa(double x,char t[],int z=10,int omega=5)
работает по аналогии со встроенными функциями:
x - входное_число
t - строка-приёмник
z - добавлено для совместимости ( так быстрее править код, к примеру itoa на dtoa)
omega- точность
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием