为什么在 C++ 中添加两个浮点数会得到一个整数?

Why does adding two float numbers give an integer in C++?

我试图在 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
float number1, number2;
  sum,average;

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

修复很简单:要么添加 float:

float number1, number2;
float sum, average;

或者用逗号代替分号:

float number1, number2, sum, average;

另外我想说的是,使用 doublefloat 更好。

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

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

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

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

cin>>"number2;

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

sum,average;

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

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

最后,拼写错误更正后,看来只是格式问题。如果值没有有意义的小数,C++ 中浮点的默认格式是使用整数格式。

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

  • cout<<showpoint<<sum<<endl;
  • cout<<fixed<<sum<<endl;.
  • or wwith scientific presentation, 但它会显示为 1.4e+01