function xTOd(i : Real) :string;
const
d='零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿';
var
m,k:string;
j:integer;
begin
k:='';
m:=floattostr(int(i*100));
for j:=length(m) downto 1 do
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];
xTOd:=k;
end;
const
d='零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿';
var
m,k:string;
j:integer;
begin
k:='';
m:=floattostr(int(i*100));
for j:=length(m) downto 1 do
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];
xTOd:=k;
end;
//PRIV ALL
const
WORD1 = 'ZERO ONE TWO THREEFOUR FIVE SIX SEVENEIGHTNINE ';
WORD2 = 'TEN ELEVEN TWELVE THIRTEEN FOURTEEN FIFTEEN SIXTEEN SEVENTEENEIGHTEEN NINETEEN ';
WORD3 = 'TWENTY THIRTY FORTY FIFTY SIXTY SEVENTYEIGHTY NINETY ';
WORD4 = ' THOUSANDMILLION BILLION ';var
S, STAIL, SHEAD: string;
VT, HEAD, TERM: INTEGER;
TAIL: DOUBLE;begin //F
STAIL := 'ONLY';
Tail := 0;
{----------------------------------}
if N <> TRUNC(N) then //不是整数
begin
TAIL := (N - TRUNC(N)) * 100;
if TAIL - TRUNC(TAIL) > 0.001 then TAIL := TRUNC(TAIL) + 1
else TAIL := TRUNC(TAIL);
//TAIL:=IIF(TAIL-TRUNC(TAIL)>0.001,TRUNC(TAIL)+1,TRUNC(TAIL));
if TAIL >= 20 then
begin
//S:=TRIM(COPY(WORD3,2,2));
S := TRIM(COPY(WORD3, TRUNC(TAIL / 9.99) * 7 - 13, 7));
TAIL := TRUNC(TAIL) mod 10;
if TAIL > 0.001 then
begin
STAIL := TRIM(COPY(WORD1, TRUNC(TAIL * 5 + 1), 5)) + ' ' + STAIL;
S := TRIM(S) + ' ' + STAIL;
end
else
S := TRIM(S) + ' ' + STAIL;
STAIL := S;
S := '';
end
else
if TAIL >= 10 then
STAIL := TRIM(COPY(WORD2, (TRUNC(TAIL) - 10) * 9 + 1, 9)) + ' ' + STAIL
else
STAIL := TRIM(COPY(WORD1, TRUNC(TAIL) * 5 + 1, 5)) + ' ' + STAIL;
STAIL := 'AND CENTS ' + TrimLeft(STAIL);
end;
{------------------------------------------}
HEAD := TRUNC(N);
TERM := 0;
while HEAD > 0 do
begin
VT := HEAD mod 1000;
HEAD := TRUNC(HEAD / 1000);
if VT > 0 then
TAIL := TRUNC(VT / 100);
if TAIL > 0 then
SHEAD := TRIM(SHEAD) + ' ' + TRIM(COPY(WORD1, TRUNC(TAIL * 5 + 1), 5)) + ' HUNDRED';
TAIL := VT mod 100;
if TAIL >= 20 then
begin
SHEAD := TRIM(SHEAD) + ' ' + COPY(WORD3, (TRUNC(TAIL / 10) - 2) * 7 + 1, 7);
TAIL := TRUNC(TAIL) mod 10;
if TAIL > 0 then
SHEAD := TRIM(SHEAD) + ' ' + COPY(WORD1, TRUNC(TAIL) * 5 + 1, 5);
end
else
if TAIL >= 10 then
SHEAD := TRIM(SHEAD) + ' ' + COPY(WORD2, (TRUNC(TAIL) - 10) * 9 + 1, 9)
else if TAIL > 0 then
SHEAD := TRIM(SHEAD) + ' ' + COPY(WORD1, TRUNC(TAIL * 5) + 1, 5);
SHEAD := TRIM(SHEAD) + ' ' + COPY(WORD4, TRUNC(TERM * 8) + 1, 8);
TERM := TERM + 1;
S := TRIM(SHEAD) + ' ' + S;
SHEAD := ''
end;
S := TRIM(S) + ' ' + STAIL;
RESULT := S;
end; //F