C语言保留两位整数,对三第位进行四舍五入

lxy1990308 2019-03-23 10:58:21
#include <stdio.h> float fun ( float h ){ long t; t = (h*1000+5) / 10; return (float)t / 100;} main( ){ float a;void NONO (); printf ("Enter a: "); scanf ( "%f", &a ); printf ( "The original data is : " ); printf ( "%f \n\n", a ); printf ( "The result : %f\n", fun ( a ) ); NONO( );} void NONO (){/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ int i ; float a ; FILE *rf, *wf ; rf = fopen("..\\in.dat","r") ; wf = fopen("..\\out.dat","w") ; for(i = 0 ; i < 20 ; i++) { fscanf(rf, "%f", &a) ; fprintf(wf, "%f\n", fun(a)) ; } fclose(rf) ; fclose(wf) ; }
...全文
871 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
拥抱Linux 2019-03-27
  • 打赏
  • 举报
回复

==> 1 楼说得对,把输出格式改一下就行了。

不过,简单测试了一下,输入负数的时候,结果有问题。

所以,fun函数里,在做四舍五入的运算之前,先把函数参数 h 的值处理成正值比较好。最后返回值的时候再乘以原来的 符号。


float fun(float h)
{
long t;
int flag = 1;
if (h < 0) {
flag = -1;
h = -h;
}
t = (h * 1000 + 5) / 10;
return (float)flag * t / 100;
}

lxy1990308 2019-03-27
  • 打赏
  • 举报
回复
引用 3 楼 coo135的回复:
你的fun函数没有进行舍位。 修改如下:

float fun(float h){
	int t;
	t=(h+0.005)*100;
	return t/100.0;
}

结果不对哦!运行结果为1234.000000
coo135 2019-03-24
  • 打赏
  • 举报
回复
你的fun函数没有进行舍位。 修改如下:

float fun(float h){
	int t;
	t=(h+0.005)*100;
	return t/100.0;
}

赵4老师 2019-03-24
  • 打赏
  • 举报
回复
仅供参考:
//Round(1.234,2) = 1.23
//Round(1.234,0) = 1.0
//Round(123.4,-1) = 120.0
double Round(double dVal, short iPlaces) {
    double dRetval;
    double dMod = 0.0000001;
    if (dVal<0.0) dMod=-0.0000001;
    dRetval=dVal;
    dRetval+=(5.0/pow(10.0,iPlaces+1.0));
    dRetval*=pow(10.0,iPlaces);
    dRetval=floor(dRetval+dMod);
    dRetval/=pow(10.0,iPlaces);
    return(dRetval);
}

double round(double dVal, short iPlaces) //iPlaces>=0
{
    unsigned char s[20];
    double dRetval;

    sprintf(s,"%.*lf",iPlaces,dVal);
    sscanf(s,"%lf",&dRetval);
    return (dRetval);
}
刘蕘 2019-03-24
  • 打赏
  • 举报
回复
printf里面的%f改成%.2f

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧