为什么在 C++ 中添加两个浮点数会得到一个整数?
Why does adding two float numbers give an integer in C++?
我试图在 C++ 中计算两个浮点数 6.5
和 7.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;
另外我想说的是,使用 double
比 float
更好。
输出的“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
我试图在 C++ 中计算两个浮点数 6.5
和 7.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;
另外我想说的是,使用 double
比 float
更好。
输出的“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