- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在读取一个包含数字(一些 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 argumentstr
to a floating-pointnumber (typedouble
). Ifendptr
is notNULL
, a pointer to thecharacter after the last character used in the conversion is stored inthe location referenced byendptr
. Ifstrtod()
could not convert the string because the correct value is outside the range of representable values, then it setserrno
toERANGE
(defined inerrno.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/
我是一名优秀的程序员,十分优秀!