c++问题。新手上路。菜鸟一只。求解。为什么输出结果是51.4。而不是51或者是51.40000785
//typetest.cpp#include<iostream>usingnamespacestd;intmain(intargc,char**argv){intsome...
//typetest.cpp
#include<iostream>
using namespace std;
int main(int argc,char** argv)
{ int someInteger=256;
short someShort;
long someLong;
float someFloat;
double someDouble;
someInteger++;
someInteger*=2;
someShort=(short)someInteger;
someLong=someShort*10000;
someFloat=someLong+0.785;
someDouble=(double)someFloat/100000;
cout<<someDouble<<endl;
} 展开
#include<iostream>
using namespace std;
int main(int argc,char** argv)
{ int someInteger=256;
short someShort;
long someLong;
float someFloat;
double someDouble;
someInteger++;
someInteger*=2;
someShort=(short)someInteger;
someLong=someShort*10000;
someFloat=someLong+0.785;
someDouble=(double)someFloat/100000;
cout<<someDouble<<endl;
} 展开
2个回答
展开全部
(先不管你的运算设计得是否正确),iostream默认就是会输出成这样的(默认输出6个数字,而51.40000785的前6个数字中后三个是0,没被输出,所以就输出了51.4。。。)
不信你可以试试执行下面的语句:
cout << 51.40000785 << endl;
输出结果应该是是51.4
要输出更多小数点位数,可以包含头文件iomanip,然后执行
cout << setprecision(15) << someDouble << endl;
不信你可以试试执行下面的语句:
cout << 51.40000785 << endl;
输出结果应该是是51.4
要输出更多小数点位数,可以包含头文件iomanip,然后执行
cout << setprecision(15) << someDouble << endl;
追问
谢谢。懂了。但是int main()为什么不输出整型呢?
追答
简单地说,cout << someDouble << endl,输出的格式是由数据类型决定的,而不是由函数的返回类型决定的。事实上ostream类重载了<<运算符。也就是说,你要输出的数据是什么类型,cout语句就会输出什么类型。
int main()中的int决定了main函数的返回类型是整型,C和C++规定main函数的返回类型必须是int型(尽管微软的VC++允许使用void main(),但这不符合C++规范)。
一个程序运行结束后要向操作系统返回一个值,来表示程序运行是否成功。C++将main函数的返回值返回给操作系统。一般main函数中return 0表示程序运行成功,return 其他值表示运行失败。
展开全部
首先我们把运算过程中的所有数值都打印出来,得到的结果是
514
5140000
5.14e+06
51.4
可以看出问题出现在float 那一步someFloat=someLong+0.785;
我说的详细一点 这步运算首先要把someLong隐式转换成float型 而float型是根据ieee754标准定义的,这个你自己查一下,float只有23位来表示位数,
最大范围是 8388608, 而你的long是 5140000785 这个是要用位数来表示的比 最大范围大,所以要截断一部分,也就只能表示5140000 后边的785被舍弃了
所以最后结果的51.4
懂了么?
514
5140000
5.14e+06
51.4
可以看出问题出现在float 那一步someFloat=someLong+0.785;
我说的详细一点 这步运算首先要把someLong隐式转换成float型 而float型是根据ieee754标准定义的,这个你自己查一下,float只有23位来表示位数,
最大范围是 8388608, 而你的long是 5140000785 这个是要用位数来表示的比 最大范围大,所以要截断一部分,也就只能表示5140000 后边的785被舍弃了
所以最后结果的51.4
懂了么?
更多追问追答
追问
嗯。懂了。就是不懂得是。为什么int main()不输出整型的~不好意思。问了个挺弱的问题~
追答
为什么int main()不输出整型的
这句没太明白什么意思
因为输出的是double类型的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询