gpt4 book ai didi

char *c = "12.3"我如何将 12.3 存储到 double 变量中

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:11 24 4
gpt4 key购买 nike

我正在读取一个包含数字(一些 int 和 double)并以“,”分隔的文件。 例子:12.2,55.9,12.5 我使用 strtok() 分隔每个数字并将其保存为一个指针。 (我使用的是“c”而不是 c++)。

char * num1 = "12.2";
char * num2 = "55.9";
char * num2 = "12.5";

我想将每个数字存储在它自己的 double 变量中。

我累了:

double numD1 = atof(num1);
double numD1 = double(num1);

最佳答案

EDITED 添加值调用 errno == ERANGE;,如下图所示

首先,在您的帖子中您表示您尝试过:

char * num1 = "12.2";  
double numD1 = atof(num1);

这应该有效。

最简单的方法是:(你已经试过了)

double x = atof("12.2");

atof() - 将字符串的初始部分转换为 double 表示形式。

更好的做法是:

double x = strtod("12.3", &ptr);

strtod() :

The C library function double strtod(const char *str, char **endptr)converts the string pointed to by the argument str to a floating-pointnumber (type double). If endptr is not NULL, a pointer to thecharacter after the last character used in the conversion is stored inthe location referenced by endptr. If strtod() could not convert the string because the correct value is outside the range of representable values, then it sets errno to ERANGE (defined in errno.h).

这是一个使用 strtod(); 和两个输入的例子:(也说明了 errno 的使用)

#include <errno.h>

int main ()
{
char input[] = "10.0 5.0";
char bad1[] = "0.3e500";
char bad2[] = "test";
char *ptr;
double a, b, c;

errno = 0;
a = strtod (input,&ptr);
if(errno != ERANGE)
{
errno = 0;
b = strtod (ptr,0);
if(errno != ERANGE)
{
printf ("a: %*.2lf\nb: %*.2lf\nQuotient = %*.2lf\n", 12, a, 12, b, 3, a/b);
}else printf("errno is %d\n", errno);
} else printf("errno is %d\n", errno);

//bad numeric input
errno = 0;
c = strtod (bad1, &ptr);
if(errno != ERANGE)
{
printf ("Output= %.2lf\n", c);
} else printf("errno is %d\n", errno);

//text input
errno = 0;
c = strtod (bad2, &ptr);
if(ptr != bad2)
{
printf ("Output= %.2lf\n", c);
} else printf("invalid non-numeric input: \"%s\" \n", ptr);
getchar();

return 0;
}

关于char *c = "12.3"我如何将 12.3 存储到 double 变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26386506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com