以下代码怎么直接用d[(strtoint(m[Length(m)-j+1])+1)*2-1]调用常量的,看不懂,高手给解释一下function   NumTOChinaCode(i:Real):string;
const
    d= '零壹贰叁肆伍陆柒捌玖分角圆拾佰仟万拾佰仟亿 ';
var
    m,k:string;
    j:integer;
begin
    i:=i*100;
    k:= '';
    m:=inttostr(trunc(i));
    for   j:=length(m)   downto   1   do
        begin
        k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]   //就是以下这几句
            +d[(strtoint(m[Length(m)-j+1])+1)*2]
            +d[(10+j)*2-1]+d[(10+j)*2];
        end;
    result:=k;
end;

解决方案 »

  1.   

    1 d是个字符串,delphi里支持d[i]的写法,表示字符串里的字符
    2 strtoint是字符转数字的函数,掠过
    3 m:=inttostr(trunc(i));//这里的m也是个字符串,同理 1
     
    剩下的就没啥了,很简单吧
      

  2.   

    inttostr是数字转字符串
    trunc是取小数整数位
      

  3.   


    d[(strtoint(m[Length(m)-j+1])+1)*2-1]就解释这一句
      

  4.   

    d[(strtoint(m[Length(m)-j+1])+1)*2-1]这句的意思是什么
      

  5.   

    Length(m),阿拉伯数字字符串的长度,也就是位数
    m[Length(m)-j+1]正在处理的那位阿拉伯数字的字符
    strtoint(m[Length(m)-j+1])+1正在处理的那位阿拉伯数字字符转成数字
    d[(strtoint(m[Length(m)-j+1])+1)*2-1]对应中文的第一个字节。
    d[(strtoint(m[Length(m)-j+1])+1)*2]对应中文的第二个字节
    d[(10+j)*2-1]+d[(10+j)*2]本位后的单位
      

  6.   

    举个例子说吧
    假设i=1.505
    代入代码当中就是
    i:= i*100;     //i就是150.5了
    然后就是
    m=150           //这里150是string类型,不是数值类型
    然后
    length(m)=3
    循环j就从length(m)也就是3开始倒减到1,当j=3时
    m[length(m)-j+1]=m[3-3+1]=m[1]=5    //就是string类型150里面的m[1]
    然后strtoint(5)  //转化成数字
    然后(5+1)*2-1=11
    最后就是d[11]了
    所以d[(strtoint(m[Length(m)-j+1])+1)*2-1]=d[11]='角';
      

  7.   

    建议将m[length(m)-j+1]用一个变量代替,要不然这么长看着累死了