P081 保留两位小数

03-程序设计题 软件121, 唐鼎威 2351浏览

所属年份:2011.3;2011.9
请编一个函数 float fun(double h),该函数的功能是:使变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如,若h 值为1234.567,则函数返回1234.570000;若h值为 1234.564,则函数返回1234.560000。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
float fun (float h )
{
    
}
void main()
{
  FILE *wf;
  float a;
  system("CLS");
  printf("Enter a: ");
  scanf ("%f",&a);
  printf("The original data is :  ");
  printf("%f\n\n", a);
  printf("The  result : %f\n", fun(a));
/******************************/
  wf=fopen("out.dat","w");
  fprintf(wf,"%f",fun(8.32533));
  fclose(wf);
/*****************************/
}

【解题思路】
注意:本题要求h的值真正进行四舍五入运算,而不是为了输出,即不能用printf(“%7.2f”,h)来直接得到结果。
四舍五入算法:如果要求精确到小数点后面的第n位,则需要对第n+1位进行运算。方法是将该小数乘以10的n+1次方后加5,然后除以10并强制转换变量类型为长整型,再将该数除以10的n次方,同时强制转换类型为浮点型。
代码实现如下:

   long  t;           /*定义长整型变量t*/
   t=(h*10n+1+5)/10; /*对h进行操作,得到值浮点型,t取值时取整数部分。10n+1为要扩大的倍数*/
   h=(float)t/10n;                /*将t缩小10n倍,并转换成浮点型*/

【参考答案】

float fun (float h )
{
   long t;
   t=(h*1000+5)/10;      /*单精度数h乘以1000后再加5,相当于对h中的第三位小数进行四舍五入
      除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/
   return (float)t/100;  /*除以100,保留2位小数*/
}