给实数打分节号的通用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]=',';}
}
}