【问题标题】:Why does adding two float numbers give an integer in C++?为什么在 C++ 中添加两个浮点数会得到一个整数?
【发布时间】:2020-01-18 09:25:55
【问题描述】:

我试图在 C++ 中计算两个浮点数 6.57.5 的总和。我希望结果是带有小数的浮点数,如14.000000。但它给出了一个答案14,以及没有小数的整数。

有人可以解释发生了什么吗?

#include <iostream.h>
int main ()
{     
  float number1, number2;
  sum,average;
   cout<<"Enter 2 numbers";
   cout<<"number1=";
   cin>>number1;
   cout<<"number2=";
  cin>>"number2;
  sum = numberl+number2;
  average=sum/2;
  cout << "sum=" <<sum ;
   cout << "Average = " << average;
  return 0;
 }

输出是:

Enter 2 numbers: 6.5 7.5
Sum=14
Average=7

【问题讨论】:

  • 试试#include &lt;iomanip&gt; /* ... */ std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(2) &lt;&lt; your_value &lt;&lt; '\n';
  • 您需要提供详细信息,阅读How do I ask a good question?
  • 也可以选择 C ​​或 C++(不能同时选择两者)并在此处发布您的代码
  • 看起来你在使用一个古老的编译器。 iostream.h 几十年前就被删除了。在这种情况下,了解您使用的编译器很重要。这是 1996 年的旧 Turbo C++ 吗?此类旧编译器的行为与 1998 年后的“现代”编译器截然不同。
  • 当您在 Stack Overflow 问题或答案中输入程序文本时,复制并粘贴 exact 代码。不要重新输入。问题中的代码至少存在三个看起来像重新输入错误的问题:sum,average; 缺少关键字。 cin&gt;&gt;"number; 有一个不应有的引号。而sum = numberl+number2; 有一个l 而不是1。此类错误会妨碍人们重现您的问题或理解您的问题。

标签: c++ floating-point formatting integer iostream


【解决方案1】:
float number1, number2;
  sum,average;

那是奇怪的时刻。似乎第二行是两个类型为int 的变量的声明。它实际上不应该工作,但根据你的文字似乎是这样。您还使用了一些非常旧的编译器。

解决方法很简单:要么添加float:

float number1, number2;
float sum, average;

或用逗号替换分号:

float number1, number2, sum, average;

另外我想说的是,使用double 比使用float 更好。

【讨论】:

  • 确实,旧的 C(和 C++?)编译器在忽略类型时假定为 int。很好的观察... ;-)
  • @Scheff,我知道默认 int,但我认为它仅适用于函数参数和返回类型。它真的有效吗,以至于像qqq; 这样的代码中的任何单词都会声明一个新的整数变量?实际上,我记得我曾经尝试过声明一个从 (* 开始的函数指针......很有趣。据我所知,它从来都不是 C++ 的一部分,仅适用于 C。
  • 现在,你问到哪里,我变得不确定了。实际上,我在 C 和 C++ 中都没有依赖过这个。我找到了SO: Omitting the datatype (e.g. “unsigned” instead of “unsigned int”) 的答案,其中也提到了默认的int
  • @Scheff,我在编写一个应该在 C 和 Pascal 中编译的程序时玩过它。对于 C,(* 声明了一个指针,而对于 pascal,它是注释的开始。它肯定是放在文件的开头。
【解决方案2】:

我认为这段代码在旧编译器和新编译器上都不能编译,因为这一行中有一个无效的双引号:

cin>>"number2;

由于有错别字,不清楚这是否是原始代码,但这一行:

sum,average;

应该会导致编译错误,因为您使用了未定义的变量。旧 C 编译器的 K&>R 语法允许在没有类型的情况下声明函数,这意味着它是 int。但这仅适用于功能。变量必须至少有一个类型说明符。

假设有一个错字并且上一行的最后一个字符是, 而不是;,那么变量将是float,这是您的预期。

最后,在纠正错别字后,这似乎只是格式问题。如果值没有有意义的小数,则 C++ 中浮点的默认格式是使用整数格式。

您可以强制使用十进制表示:

  • cout&lt;&lt;showpoint&lt;&lt;sum&lt;&lt;endl;
  • cout&lt;&lt;fixed&lt;&lt;sum&lt;&lt;endl;
  • 或 wwith scientific 演示文稿,但随后将显示为 1.4e+01

【讨论】:

    【解决方案3】:

    输出“14”不是浮点数或整数类型。它是字符文本。它并不表示与cout &lt;&lt; sum 一起使用的值具有任何特定类型。

    之所以将6.5和7.5相加得到整数结果是因为数学结果是14,而14是整数。浮点类型能够表示整数。当您使用cout &lt;&lt; sum 输出此值时,默认格式会生成文本“14”。

    要指示流显示浮点输出的小数点和尾随零,请将cout.setf(ios_base::showpoint); 插入您的代码中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多