VC编程如何设置数据小数点后位数

程序代码如下
*******************************************************************
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

原始数据几位小数,结果也是几位。
这是对的。atof无法提升精度。

至于楼主所希望的3位变成6位,其实数据在内存中的精度足够。
只是你输出数据的时候没有加控制符而已。
用下面例程可以输出小数点后6位的浮点数。
printf("%.6f",m_cloudPts[modalNum].x);

double的取值范围,如果小数点前的有效数字不多的话,应当可以满足小数点后9位的要求。
2.2250738585072014 E – 308
1.7976931348623158 E + 308
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-29
如果m_cloudPts是float的话,自动转换成8个有效数字,小数点的位数好像没有办法控制的
比如:输入的是123.45 那么就会变成:123.45000
输入的是1.2345 那么就会变成:1.2345001

显示的时候,可以用"%.06f"做格式化,这时候是可以控制小数点的位数的

补充:
atof的返回值类型是double,而不是float,只要你左边的值是double就不会被截断

double atof(const char *nptr);已经明确说是double类型了,浮点数包含单精度float和双精度double
第2个回答  2015-10-31
这个是浮点数,int,float,double float,位数是固定的,取决于采用的字节长度。你只能在它的基础上取舍,用与的方式只要想要的位数。
相似回答