3

我有字符串temp[256],里面有一个双数,诸如此类0.125,虽然有时它得到的数字对于双数来说太大了,比如0.888888888888888888888888888888888888888883,而双数只包含 7 个数字而不是全部。

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

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一个8815818像整数...所以我想我需要一个更大的变量?

4

2 回答 2

2

在处理双精度或浮点数时,Printf 具有默认行为,即在零后仅打印 7 位数字,但是您可以更改该行为并控制在零 printf 之后打印多少个数字,如下所示

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

在这里,您在零之后得到 20 位数字。

更多详情请参考:

  1. http://www.cplusplus.com/reference/clibrary/cstdio/printf/
  2. c编程语言第二版。
于 2012-06-16T07:37:13.360 回答
1

两个问题:

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

2)正如刚才 所说,您可以“格式化”任何浮点值 - 使用“格式字符串”限制#/digits等。

于 2012-06-16T07:38:47.550 回答