今天在学校做上机课,编写了一个输入圆半径然后计算圆的周长面积以及对应球体体积的小程序。本来只是小试牛刀,没想到出了一个百思不得其解的问题,代码如下:
#include <stdio.h>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
const double pi = 3.14;
double r;
double c;
double s;
double v;
cout << "Please input a number to be the radius: ";
cin >> r;
c = 2 * pi * r;
s = pi * r * r;
v = 4 / 3 * pi * r * r * r; //注意此行
cout << c << endl;
cout << s << endl;
cout << v << endl;
system("pause");
return 0;
}
此时输出的v值似乎自动忽略了前面的 4/3……如果将4改成4.0或者3改成3.0则输出正常!百思不得其解,求大神解答~~
因为没有给4和3数据类型,默认的4,3都是整形,所以相除的话,结果是1,1*任何数都是它本身,所以没用
加上4.0,或者3.0以后表示把它强制转换为浮点型,所以结果是小数
c++中规定整数与整数相除,结果是一个整数;浮点数与整数,整数与浮点数,浮点数与浮点数相除,结果都是浮点数。4与3都是整数,所以4/3 = 1;
4/3会被认为是一个整除操作,结果就是1了。
4.0/3会被认为是一个除法操作,结果会出来小数。
所以,千万不要随便让两个整数类型相除,除非你确定是需要整除。