#include
#include
void reverse(char *str, int n) {
int p = 0, q = n-1;
char t;
while (p < q) {
t = str[p];
str[p] = str[q];
str[q] = t;
p++;
q--;
}
}
void f2s(float f, char* str) {
int i = 0;
int n = (int)f;
f -= n;
while (n > 0) {
str[i++] = n % 10 + '0';
n /= 10;
}
reverse(str, i);
str[i++] = '.';
n = 0;
while (f > 0 && n < 6) {
int t = (int)(f * 10);
str[i++] = t + '0';
f = f * 10 - t;
n++;
}
str[i] = '\0';
}
int main() {
float f = 234.123;
char str[100];
f2s(f, str);
printf("%f\n", f);
printf("%s\n", str);
return 0;
}
这个也不是最好的方法,勉强能用吧
unsigned char string[50]; // 返回定义的字符串
void Floattostr(float a,unsigned int bb) // a: 需要转换的float,bb:转换的小数点位数
{ long k;
int i,sig,j,l; // sig 浮点数符号
long m,n; // m 浮点数的整数部分,n浮点数小数部分。
unsigned char *strz,*strx;// 临时变量。
for(i=0;i<50;i++)
string[i] = '\0' ;
sig = 1; // 默认是正数
k = 1; //
j = 0;
m = (long)(a); // 对a取整。
if(m < 0) { sig = -1;string[j++] = 0x2D; } // 符号
for(i = 0;i < bb;i++) k *= 10;
n = (long)((a - (float)m)*(float)k +sig * 0.5); // 取小数部分?
n *= sig;
m *= sig; // 取绝对值
for(i =0,strz[0] =0x30; m != 0L; m/= 10)
{
strz[i++] = (unsigned char)(((((unsigned char)(m%10))&0x0F)<0x0A ?(((unsigned char)(m%10))&0x0F):0)|0x30); // 整数
}
for(k = 0, strx[0] = 0x30 ; k <= bb ; n /=10 )
{
strx[k++] = (unsigned char)(((((unsigned char)(n%10))&0x0F)<0x0A ?(((unsigned char)(n%10))&0x0F):0)|0x30); // 小数
}
for(l=i-1;l>=0;l--) string[j++] = strz[l];
if(bb != 0)
{
string[j++]=0x2E;
for(k--; k >0;)
string[j++] = strx[--k];}
}
是以整型的位数为限的,输入位数太长了不行。
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"//
void main(void){
double rn=9876.5678;
int i=1000000000,k,pt=1,n;
char a[12]="";
printf("Enter a floating point number...\nrn=");
//scanf("%lf",&rn); //手工输入时把这一行开放.
while((rn/=10)>1.0) pt++;
n=(int)(rn*i);
while(!(n%10)){
n/=10;
i/=10;
}
for(k=0,i/=10;i>=1;i/=10){
a[k++]=n/i+'0';
n%=i;
if(k==pt) a[k++]='.';
}
printf("%s\n",a);
}
直接采用sprintf(str, "%f", ...)则可。
那个~~北京泗洪人 真厉害,我也收藏了,看看源代码