我有字符串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
而不是整数...
所以我想我需要一个更大的变量?
答案 0 :(得分:2)
Printf在处理双打或浮点数时,默认行为只能在零之后打印7位数,但是你可以改变这种行为并控制零printf之后打印的数字
printf ("%.20f\n", temp_num);
这里你得到零后的20位数字。
有关详细信息,请参阅:
答案 1 :(得分:1)
两个问题:
1)我更喜欢"sscanf()"而不是“atof()”:它允许您检查转换错误(即非法数字)。
2)正如dirkgently已经说过,你可以"format"任何浮点值 - 用“格式字符串”限制#/ digits等。