给实数打分节号的通用C 函数


 

         给实数打分节号的通用C 函数

 

     中国人民银行保山分行科技科 周易达 陈春江

       (邮编:678000 电话:0875 20415)

 

  众所周知,金融系统运用计算机处理各部门的帐务,已达到较高的水平,而帐务或一些数据处理中,常常要打印大量且又庞大的数据,为便于认读,一般要对整数部分加打分节号,使读者一目了然。这

对于FOXBASE 用户来说,可能是极简单的事。然而,随着用户对计算机需求的增长,FOXBASE 已满足不了用户的全面需求! 事实上,当前金融系统的应用程序正从FOXBASE 转向功能强大的ORACLE系统,属主语言多采用C 语言。而C 中没有为实数打分节号的函数,许多人为此写了函数,但多是上百条语句方能实现,质量不高,笔者在实际工作中,编写了一个十分简洁的打分节号通用函数,下面是程序清单,以供同仁参考。更希望高明之士给予斧正。

 

/*************************************

 * 函数名: dy_fjh(dn,p,l,m)     *

 * : 给实型数打分节号     *

 * : dn-实型数字 p-输出字符串 *

 *     l-字符串长度 m-小数位数  *

 *************************************/   

#include <stdio.h>

#include <math.h>

dy_fjh(dn,p,l,m)

 int l,m; char p[]; double dn;

{ int i,j,k; char s[40];

 m=m>6?6:m;

 k=strlen(s); l=l>k+k/3?l:k+k/3+1;

 sprintf(s,"%.*lf",m,dn);

 sprintf(p,"%*s",l," ");

 if (fabs(dn)<0.0000001) return;

 for(i=0;i<strlen(s)&&s[i]!='.';i++);

 for(k=1,j=i+m;j+1>i;k++,j--) p[l-k]=s[j];

 l=l-k;

 i=i-1;

 for(j=0,k=1;i>=0;j++,k++,i--)

  { p[l-j]=s[i];

   if((k%3==0 && i>0) && s[i-1]!='-'){j++;p[l-j]=',';}

  }

 }