C++ 求解 结果四位小数存储怎么修改
(1) 以下程序的功能是:随机产生2个【10,50】之间的整数a和b,计算(((a-b)/(a+b))*(a/b))的值。运行结果按四舍五入保存4位小数存储到变量中。#include<time.h>
#include<math.h>
#include<stdlib.h>
void main()
{
int a,b;
float f;
srand(time(0));
a=rand()%41+10;
b=rand()%41+10;
f=(((a-b)/(a+b))*(a/b));
f=(int)(f*10000+0.5)/(float)10000;
printf("a=%d,b=%d,f=%f\n",a,b,f);
getchar();
}
结果f为0.000000 为什么怎么修改,并且改为保留四位小数 本帖最后由 superbe 于 2019-9-29 13:13 编辑
#include<time.h>
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
void main()
{
int a,b,sgn=1;
float f;
srand(time(0));
a=rand()%41+10;
b=rand()%41+10;
f=(((a-b)*1.0/(a+b))*(a*1.0/b)); //这个式子*1.0是将整数变成浮点数再计算,否则整数和整数相除结果还是整数,会截掉小数部分,比如1/2=0
if(f<0) sgn=-1;
f=(int)(fabs(f)*10000+0.5)/(float)10000*sgn; //考虑 f 是负数的情况取绝对值,不能直接+0.5
printf("a=%d,b=%d,f=%f\n",a,b,f); //如果不想显示4位小数后面的零,可以改成f=%.4f
getchar();
} 本帖最后由 jackz007 于 2019-9-29 14:01 编辑
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
float f , a , b ;
srand(time(0)) ;
a = rand() % 41 + 10 ;
b = rand() % 41 + 10 ;
f = (a - b) / (a + b) * (a / b) ;
f = (f > 0) ? f + 0.00005 : f - 0.00005 ; // 小数点第5位四舍五入
printf("a = %d , b = %d , f = %.4f\n" , (int) a ,(int) b , f) ;
getchar() ;
}
页:
[1]