程序代码如下
*******************************************************************
CStdioFile File1; // 定义一个CStdioFile类变量File
File1.Open("zuo1(6901).txt",CFile::modeRead); //model点云
CString FileData1; //定义一个CString变量作为缓冲区
/*定义三个临时字符串,并初始化为'\0'*/
char TempStr1[10];
char TempStr2[10];
char TempStr3[10];
memset(TempStr1,'\0',10);
memset(TempStr2,'\0',10);
memset(TempStr3,'\0',10);
/*逐行读取坐标数据*/
for (int modalNum = 0; modalNum<NN1;modalNum++)
{
File1.ReadString(FileData1); //将一行数据读到缓冲区
sscanf(FileData1,"%s %s %s",TempStr1,TempStr2,TempStr3);
m_cloudPts[modalNum].x=atof(TempStr1);
m_cloudPts[modalNum].y=atof(TempStr2);
m_cloudPts[modalNum].z=atof(TempStr3);
}
File1.Close();
*******************************************************
假如txt文件中存的数据小数点后只有3位,我想在m_cloudPts[modalNum].x=atof(TempStr1)存入数组时,数据变成小数点后面有6为(不够的加0),程序怎么设置?
m_cloudPts=new NEWPOINT3D2EX[NN1]; //为存储model点申请内存空间
m_cloudPts是一个结构体。
我的运算结果是:原始数据几位小数,结果也是几位。
*****************************************************
我想到了一个笨办法:
m_cloudPts[ptNum].x=atof(TempStr1)+0.000000000;
但是显示结果只有小数点后6位。。。。
float的精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4字节空间
double的精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8字节空间。
atof是字符转为float,没有字符转为double的啊。
怎么解决?我要小数点后9位!!
atof(将字符串转换成浮点型数)
相关函数
atoi,atol,strtod,strtol,strtoul
表头文件
#include <stdlib.h>
定义函数
double atof(const char *nptr);
函数说明
atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值
返回转换后的浮点型数。
附加说明
atof()与使用strtod(nptr