以下代码怎么直接用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;
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;
2 strtoint是字符转数字的函数,掠过
3 m:=inttostr(trunc(i));//这里的m也是个字符串,同理 1
剩下的就没啥了,很简单吧
trunc是取小数整数位
d[(strtoint(m[Length(m)-j+1])+1)*2-1]就解释这一句
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]本位后的单位
假设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]='角';