将带有双精度数字的字符串转换为双精度数字

时间:2012-06-16 07:32:22

标签: c

我有字符串temp[256],里面有一个双号,例如0.125等等,一切都很顺利,虽然有时它会得到一个对于双数而言太大的数字,像0.888888888888888888888888888888888888888883一样,双号仅保存7个数字而不是全部。

我一直在使用atof将字符串转换为double,但我认为这里的问题是double,因为它没有足够的空间容纳所有数字.... 这就是我写的:

char temp[256]; // Has the number inside it
double temp_num = 0; // need to put the string inside this variable
temp_num = atof(temp);
printf ("%f\n", temp_num);

只要数字不大于零后的7位数,打印输出就可以了,但如果它是0.8815818188888888888888888888888888888888888888888143之类的数字,它只打印7个第一位数,就像这样例如,它将打印8815818而不是整数... 所以我想我需要一个更大的变量?

2 个答案:

答案 0 :(得分:2)

Printf在处理双打或浮点数时,默认行为只能在零之后打印7位数,但是你可以改变这种行为并控制零printf之后打印的数字

printf ("%.20f\n", temp_num);

这里你得到零后的20位数字。

有关详细信息,请参阅:

  1. http://www.cplusplus.com/reference/clibrary/cstdio/printf/
  2. c编程语言第二版。

答案 1 :(得分:1)

两个问题:

1)我更喜欢"sscanf()"而不是“atof()”:它允许您检查转换错误(即非法数字)。

2)正如dirkgently已经说过,你可以"format"任何浮点值 - 用“格式字符串”限制#/ digits等。