PDA

View Full Version : مبتدی: تبدیل float به string



mortezamsp
پنج شنبه 16 مهر 1388, 20:56 عصر
با سلام.

نمیدونم آیا این کد اشکال داره یا بقیه برنامه! مشکل اینه که این تابع که قراره یه نوع float رو به string تبدیل کنه ، وقتی بهش یه عدد مثبت میدی رشته ی خالی بر میگردونه!


void plotter::print_rnums(float fltnum,float x,float y,char *massage)
{
int c=getcolor();

int strsize=10;
char *str1=new char[strsize],*str2=new char[strsize];strcpy(str1,"0");
int i=0,j=0,a=floor(fltnum);
//if fltnum<0
if(a<0)
{
str1[0]=str2[0]='-';
i++;
j=1;
a*=-1;
fltnum*=-1;
}
//befor point
while(a>0)
{
str1[i]=(a%10)+48;
i++;
a/=10;
}
str1[i]=NULL;
i--;
for(int k=j;i+j-k>0;k++)
str2[k]=str1[i-k+j];
str2[k]=NULL;
//if has not point
if(int(fltnum)==1)
{
str2[i+1]=NULL;
}
else
{
str2[i+1]='.';
i+=2;
fltnum-=floor(fltnum);
//seprating digits after point
while(i<strsize)
{
fltnum*=10;
int b=fltnum;
str2[i]=b+48;
i++;
fltnum-=b;
}
str2[i-1]=NULL;
}
//deleting extra '0'
for(j=i-2;str2[j]==48 && j!=0;j--)
str2[j]=NULL;
outtextxy(x,y,massage);
outtextxy(x+(8*strlen(massage)),y,str2);

setcolor(c);
delete str1,str2;
}ممنونم.

tdkhakpur
جمعه 17 مهر 1388, 11:40 صبح
داخل کد بالا پدر هر چی متغییر هست را در آوردید
میتوانی تابع زیر را برای کارتان استفاده کنید.


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
//-----------------------------------
char *ltoa_(double val)
{
static char tmp[32]={0}, ch;
int point=0, len;
long a = val;
while(a>0){
tmp[point++] = (char)(a%10)+48;
a = a/10;
}
len = strlen(tmp);
for( int i=0; i<len/2; i++){
ch = tmp[i];
tmp[i] = tmp[len-i-1];
tmp[len-i-1] = ch;
}
return tmp;
}
//-----------------------------------
char* F2A ( double Val, int point=-1 )
{
static char LocalInt[50];
char tmp[32]={0};
double pointval;
int i, Digit;
strcpy( LocalInt, ltoa_(Val));
Digit = strlen(LocalInt);
if( Val<0 ) Val = -Val;
if( point > 0 )
{
LocalInt [Digit++] = '.';
pointval = (Val-(long)Val )*pow(10, point)+0.1;
strcpy(tmp, ltoa_(pointval));
for( i=point-1; i>strlen(tmp); i--)
tmp[i] = '0';
memcpy( &LocalInt[Digit], tmp, point);
LocalInt[Digit+point] = 0;
}
return &LocalInt[0];
}
//-----------------------------------
int main()
{
printf("\n %s", F2A(340.33, 3));
return 0;
}

mortezamsp
جمعه 17 مهر 1388, 12:02 عصر
خیلی ممنون آقا.

ببینم اصلا خودت این کد رو یبار هم کامپایلش کردی؟بگذریم.
من تابعی میخواستم که از تعداد اعشار خبری نداره.فقط یه دابل میگیره و رشته میده.تازه این تابع اعداد منفی رو هم نمیشناسه.تو سی شارپ چطور مینویسیم convert.tostring() اینجا میخوام همون تابع رو پیاده سازی کنم.خودم کچل شدم ازبس نتونستم این کد ساده رو بسازم.

بازم ممنون.


راستی ، این یکی هم میخواد رشته رو به دابل تبدیل کنه.واقعا گیج شدم که چرا نمیتونه نقطه "." رو بخونه!کد رو که نگاه میکنم کاملا درسته!ولی بازهم اعداد اعشاری رو نمیخونه!

#include<iostream.h>
#include<conio.h>
#include<math.h>

char *text="+321321.54654654";

double get_number()
{
double num=0;int pw,i=0;

if(text[0]=='-' || text[0]=='+')
{
i++;
}
while(text[i]>=48 && text[i]<=57)
{
num=(num*10)+(text[i]-48);
i++;
}
if(text[i]=='.')
{
i++;
pw=10;
while(text[i]>=48 && text[i]<=57)
{
num=num+((text[i]-48)/pw);
i++;
pw=pw*10;
}
//i--;
}
if(text[0]=='-')
num*=-1;
return(num);
}

void main()
{
clrscr();
double d=get_number();
cout<<d;
getch();
}

بازم ممنون.

خیلی ممنون آقا.

tdkhakpur
جمعه 17 مهر 1388, 14:43 عصر
خیلی ممنون آقا.

ببینم اصلا خودت این کد رو یبار هم کامپایلش کردی؟بگذریم.
من تابعی میخواستم که از تعداد اعشار خبری نداره.فقط یه دابل میگیره و رشته میده.تازه این تابع اعداد منفی رو هم نمیشناسه.
من متوجه نشدم معنی خواسته شما چیه خوب شما تبدیل خواستی من بهترین تبدیل را که میشه داخل حسابداری ازش استفاده کرد برای شما ارسال کردم.. من به چیزی که ارسال میکنم چه چیزش را اجرا کنم..
باز این کد را هم میتوانی برای تبدیل اعشار بدون انتساب مقدار به جای تابه فوق استفاده کنید.


char* F2A ( double Val, int point=-1 )
{
static char LocalInt[50];
char tmp[32]={0};
double pointval;
int i, Digit=0;
if( Val<0 ) {
LocalInt[Digit++] = '-';
Val = -Val;
}
strcpy( &LocalInt[Digit], ltoa_(Val));
Digit += strlen(&LocalInt[Digit]);
if( point > 0 )
{
LocalInt [Digit++] = '.';
pointval = (Val-(long)Val )*pow(10, point)+0.1;
strcpy(tmp, ltoa_(pointval));
for( i=point-1; i>strlen(tmp); i--)
tmp[i] = '0';
memcpy( &LocalInt[Digit], tmp, point);
LocalInt[Digit+point] = 0;
}
return &LocalInt[0];
}

حامد مصافی
یک شنبه 19 مهر 1388, 10:08 صبح
float f;
f = 5.25; //just an example
std::ostringstream string_stream;
string_stream << f;
cout << string_stream.str();

mortezamsp
سه شنبه 21 مهر 1388, 21:34 عصر
float f;
f = 5.25; //just an example
std::ostringstream string_stream;
string_stream << f;
cout << string_stream.str();


خیلیییییییییییییییییییییی ییییییی ممنون داداش!
ما گفتیم بصورت تابع بنویسیدش ببینیم کدش چیه چطور کارمیکنه.میخوام از نو بنویسمش!
بازم ممنون.

اون کد tdkhakpoor هم غلطه!گفتم بدون دونستن تعداد اعشار!