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

  • 来源: 天新网 作者: 若水   2008-05-08/06:09
  •  
    分类:不常用
    语种:简体中文
    编辑器: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 //本函数在VFPVB中均为系统内部函数
    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;

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多