之前在《 带参数的main函数 》一文小结中提到将double型数据转化为字符串(double2str函数),因为编译器数据精度的原因导致得出的字符串最后一位有误差,现在本文将误差补全,输出精准的字符串。
注:该程序得出的字符串省略了小数点
#include<stdio.h>
#include<math.h>
int main()
{
char ch; //循环结束标志
double a;
int point_num; //精度(小数位数)
double accuracy; //精度(10^(-n))
do
{
printf("输入待转换的double数据:");
scanf("%lf",&a);
printf("输入精度(几位小数):");
scanf("%d",&point_num);
accuracy=1/pow(10,point_num); //精度转换为小数形式,如精度为4,accuracy=0.0001
int i=0;
int count=0;
char str[10];
int n,k;
double judge;
n=(int)a;
while(1)
{
judge=n/pow(10,count);
if(judge<accuracy)
{
if(n==9) //精确位后一位是9,那就存在估读,精确位加1
str[i-1]=(k+1)%10+'0';
break;
}
k=n; //循环前数据留底
str[i]=n%10+'0';
count++;
n=(int)(a*pow(10,count))%10;
i++;
}
str[i]='\0';
printf("a = %lf\t字符串:%s\n",a,str);
fflush(stdin);
printf("输入y/Y继续... ");
ch=getchar();
if(ch=='y'||ch=='Y')
continue;
else
break;
}
while(1);
return 0;
}