【问题标题】:C++ Integer Division to Float [closed]C ++整数除法浮点[关闭]
【发布时间】:2017-12-09 06:40:09
【问题描述】:

我的 C++ 程序接受三个整数输入并进行一些计算,包括除法。起初,最终结果不是小数。在 Stack Overflow (Dividing two integers to produce a float result) 上搜索了一下后,我发现我应该添加一个 (float),如下所示:

int a;
int b;
float c;

a = 5;
b = 2;

c = (float)a / b;

所以我尝试了,但结果是 -nan(ind)。首先,这是什么意思?其次,如何让我的程序正常运行?

顺便说一下,这是我想在我的程序中做的数学运算。

int v;
int e;
int a;
float r;

r = ((float)e - v) / ((float)a / 1000);

编辑:对不起,我的错误。我的意思是在第二个示例中输入 1000,而不是 c。

【问题讨论】:

  • 在您的第一个示例中std::cout << c 会得到什么?
  • 无法复制,c 对我来说是 2.5。问题可能在于您如何检查c 的值。
  • 您展示的第一个代码示例中没有任何内容可以执行此操作;第二个代码示例是无意义的,因为它使用了未初始化的变量。提供你能想出的最小的代码示例,编译、运行和显示问题
  • 表示c不是数字。所以要么你打印错了,要么你的代码不是你发布的代码(或者编译器有问题,我们可以排除)。

标签: c++ floating-point int precision integer-division


【解决方案1】:

您必须像第一个示例一样初始化每个变量,并为每个变量赋值。
试试这个:

int v;
int e;
int a;
int c;
float r;



a = 5;
c = 2;
e = 5;
v = 2;

r = ((float)e - v) / (float)a / c;
cout << r;

【讨论】:

  • 虽然这可能会回答这个问题,包括解释为什么/如何这个代码是一个答案会让它变得更好。
【解决方案2】:

尝试将每个变量转换为浮点数,看看是否能解决问题。此外,在您的第二个示例中,您从未初始化变量,这会导致错误,因为它们的值未定义,它可能是任何东西。您还忘记包含变量 c。

看看这是否会引发错误:

int v = 1;
int e = 1;
int a = 1;
int c = 1;
float r;

r = ((float)e - (float)v) / (float)a / (float)c;

另外,对于类型之间的转换,我建议您使用 'static_cast(variable)' 而不是 '(type)variable'。这是在 c++ 中强制转换类型的推荐方法,它还使调试时更容易发现转换。您的代码如下所示:

int v = 1;
int e = 1;
int a = 1;
int c = 1;
float r;

r = (static_cast<float>(e) - static_cast<float>(v)) / static_cast<float>(a) / static_cast<float>(c);

【讨论】:

  • 请注意,您甚至可以使用 float r= .... 进行最后的声明和赋值。
  • @HansOlsson 这是真的!虽然我希望他们有代码在值的声明和最后一行之间获取 v、e、a 和 c 的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2023-03-25
  • 2013-02-07
  • 2017-03-05
  • 2012-08-11
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多