一款人民币金额大小写转换的演示程序

2008-02-23 07:21:02来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

分  类:不常用
语  种:简体中文
编辑器:Delphi7
平  台:Win9x,Win2k/NT,WinXP
作品源代码: 本地下载
软件或演示: -
代码大小: 165.5K
软件大小: -

本函数由本人十多年前用DBaseIII编写,现用Pascal改编。如发现有错请告诉我,如发现有更为短小精简(当然必须符合财务规定)的,也请告诉我。
人民币金额大小写转换的函数,从国人使用数据库以来就被无数人用无数种算法写过,应该是一个典型的算法问题,但未见有比较权威的、业界公认比较优秀的算法。

//以下函数能将小于十万亿元的小写金额转换为大写
//作者 方小庆(inrm@263.net)
Function NtoC(n0 :real) :String;
Function IIF(b :boolean; s1,s2:string):string;
begin //本函数在VFP和VB中均为系统内部函数
if b then IIF:=s1 else IIF:=s2;
end;
Const c = '零壹贰叁肆伍陆柒捌玖◇分角圆拾佰仟万拾佰仟亿拾佰仟万';
var L,i,n, code :integer;
Z :boolean;
s, st,st1 :string;
begin
s :=FormatFloat( '0.00', n0);
L :=Length(s);
Z :=n0<1;
For i:= 1 To L-3 do
begin
Val(Copy(s, L-i-2, 1), n, code);
st:=IIf((n=0)And(Z Or (i=9)Or(i=5)Or(i=1)), ', Copy(c, n*2 1, 2))
IIf((n=0)And((i<>9)And(i<>5)And(i<>1)Or Z And(i=1)),',Copy(c,(i 13)*2-1,2))
st;
Z := (n=0);
end;
Z := False;
For i:= 1 To 2 do
begin
Val(Copy(s, L-i 1, 1), n, code);
st1:= IIf((n=0)And((i=1)Or(i=2)And(Z Or (n0<1))), ', Copy(c, n*2 1, 2))
IIf((n>0), Copy(c,(i 11)*2-1, 2), IIf((i=2) Or Z, ', '整'))
st1;
Z := (n=0);
end;
For i := 1 To Length(st) do If Copy(st, i, 4) = '亿万' Then Delete(st,i 2,2);
NtoC := IIf( n0=0, '零', st st1);
End;

上一篇: 操作系统课程设计 (演示信号量、临界区、多进程管理)
下一篇: 嵌入汇编得到CPU的ID号码的演示

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:又一款人民币金额大小写转换的演示程序

下一篇:操作系统课程设计 (演示信号量、临界区、多进程管理)