double类型小数位数的有关问题

double类型小数位数的问题string s 156.358123double d atof(s.c_str())转换后为什么后面几位小数

double类型小数位数的问题
string s = "156.358123";
double d = atof(s.c_str());
转换后为什么后面几位小数被去掉了
怎样能全部转过来?
即确保把s整个转换成double型的
如何实现?


[解决办法]
atof应该是转换成float吧,试试strtod看看
不过这些我没用过,仅供参考
[解决办法]

引用:
atof应该是转换成float吧,试试strtod看看
不过这些我没用过,仅供参考
atof返回值类型是double


引用:
string s = "156.358123";
double d = atof(s.c_str());
转换后为什么后面几位小数被去掉了
怎样能全部转过来?
即确保把s整个转换成double型的
如何实现?
你是怎么查看所谓的“后面几位小数被去掉”的?
[解决办法]
double有效数字在16位之间。楼主的例子用atof完全没有问题的,而且atof的返回值是double,  而不是字面float:

#include <stdlib.h>
double atof(const char *nptr);

只是printf("%f\n", ...)只打印6位小数,

#include <string>
using namespace std;

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    string s = "156.358123";
    double d = atof(s.c_str());
    printf("%.16f\n", d);
    printf("%f\n", d);
    return 0;
}