【问题标题】:C: Error converting from int to float or doubleC:从 int 转换为 float 或 double 时出错
【发布时间】:2020-08-07 09:04:16
【问题描述】:

我正在尝试为学校项目生成一个介于 1 和 0 之间的随机数。有几个地方说这应该使用 rand() 并强制转换为浮动来完成。类似于以下内容:

float x = ((float)rand()/(float)(RAND_MAX)) * a;

但是,我发现每当我从 int 转换为 float 时,数字都是不正确的。这个问题导致我使用上面的代码得到不正确的答案

代码:

int rotlat = rand() % 1000;
double newrot = (double) rotlat;
printf("rotational latency: %d\n", rotlat);
printf("new rotational latency: %d\n", newrot);

输出:

rotational latency: 533
new rotational latency: -1841876320

rotational latency: 279
new rotational latency: -1841876320

rotational latency: 148
new rotational latency: -1841876320

rotational latency: 167
new rotational latency: -1841876320

【问题讨论】:

  • 1.您的“类似”根本不是您在代码中实际执行的操作。你为什么不听劝告? 2.%dprintf格式说明符,用于打印ints。传递 double 是未定义的行为。使用%f
  • 谢谢你我笨

标签: c random floating-point type-conversion int


【解决方案1】:

试试:

printf("new rotational latency: %g\n", newrot); //%g

%d 指令用于十进制整数,而不是双精度数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多