如果读法不考究可以先乘以100,再取整,将其itoa(),
然后挨个处理
你的数字设为 num[80];
int length= strlen(num);
for(i=0;i<length;i++)
{
  switch (num[i])
  {
     case '0' :if(i<3){write("零");}break;
     case '1' : write("壹");break;
     。  }
  if(num[i]>'0')
  {
     switch(i){
        case 3 : write('点');break;
        case 4 : write('拾'):break;
        case 5 : write('百');break;
        ......
     }
  }}行吗?

解决方案 »

  1.   

    我一位热心的网友给我一段代码,大家讨论下这样行吗?
    function Tform1.SmallTOBig(small:real):string;
    var SmallMonth,BigMonth:string;
    wei1,qianwei1:string[2];
    wei,qianwei,dianweizhi,qian:integer;
    begin
    {------- 修改参数令值更精确 -------}
    {小数点后的位置,需要的话也可以改动-2值}
    qianwei:=-2;
    {转换成货币形式,需要的话小数点后加多几
    Smallmonth:=formatfloat('0.00',small);
    {---------------------------------}
    dianweizhi :=pos('.',Smallmonth);{小数点的位置}
    {循环小写货币的每一位,从小写的右边位置到左边}
    for qian:=length(Smallmonth) downto 1 do
    begin
    {如果读到的不是小数点就继续}
    if qian<>dianweizhi then
    begin
    {位置上的数转换成大写}
    case strtoint(copy(Smallmonth,qian,1)) of
    1:wei1:='壹'; 2:wei1:='贰';
    3:wei1:='叁'; 4:wei1:='肆';
    5:wei1:='伍'; 6:wei1:='陆';
    7:wei1:='柒'; 8:wei1:='捌';
    end;
    {判断大写位置,可以继续增大到real类型的最大值}
    case qianwei of
    -3:qianwei1:='厘';
    -2:qianwei1:='分';
    -1:qianwei1:='角';
    0 :qianwei1:='元';
    1 :qianwei1:='拾';
    2 :qianwei1:='佰';
    3 :qianwei1:='千';
    4 :qianwei1:='万';
    5 :qianwei1:='拾';
    6 :qianwei1:='佰';
    7 :qianwei1:='千';
    8 :qianwei1:='亿';
    9 :qianwei1:='十';
    10:qianwei1:='佰';
    11:qianwei1:='千';
    end;
    inc(qianwei);
    BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}
    end;
    end;
    SmallTOBig:=BigMonth;
    end;
    调用如下“edit1.text:=SmallTOBig(1234567890.1234);”他自动默认小数点后两位