自己以前写的,如果要写好的程序可以加我QQ:38223756
调用如下
Edit2.text := chn_money(strtofloat(trim(Edit1.text)));
代码:在下面
unit Unit2;
//*************************************************//
// 单元作用:定义函数chn_money将数字转为金额大写 //
// 敬告: 整数部分不能超过10位 //
//*************************************************//
interface
uses SysUtils, Dialogs, StrUtils;
//***********************************************//
// 作用:将数字转为金额大写 //
// 函数名: chn_money //
// 输入参数:一个数字(double) //
// 返回值: 数字的金额大写(String) //
// 备注:返回值精度到分,4舍5入 //
// 敬告: 整数部分不能超过10位 //
// 参考:字符串转换strtofloat //
//***********************************************//
function chn_money(money: double): string;
implementation
var
chn_sectionunit: array[0..2] of string;
chn_number: array[0..9] of string;
gw: integer
// 个位
//******************************************//
// chn_intvalue:将整数转为大写 //
// 输入参数:整数(int) 正负均可 //
// 返回值: 整数的大写(String) //
//******************************************//
function chn_intvalue(ivalue: integer): string;
var
intstr, signstr, tstr, ls_gw: string;
q_digit, b_digit, s_digit, g_digit: string;
len, sectionlevel: integer;
zeroresulthead, zerohead: boolean;
begin
if (ivalue = 0) then
begin
result := '零';
Exit;
end
else if (ivalue < 0) then
begin
signstr := '负';
ivalue := -ivalue;
end
else
begin
signstr := '';
end;
intstr := IntToStr(ivalue)
//整数转字符型
len := Length(intstr)
//len 整数的位数
ls_gw := Copy(intstr, len, 1);
gw := StrToInt(ls_gw);
sectionlevel := -1
//以4位数字为一节: eg. "万"节
"亿"节;
zeroresulthead := false;
{跨节用途.(指明上一循环后产生的中间结果(低位"节"
是否为"零"开头)}
while (len > 0) do
begin
inc(sectionlevel);
//取得本节各位的数值, 并更新数据源intstr.
g_digit := Copy(intstr, len, 1)
// 节内"个"位.
if (len > 1) then
s_digit := Copy(intstr, len - 1, 1)
else
s_digit := ''
// 节内"十"位.
if (len > 2) then
b_digit := Copy(intstr, len - 2, 1)
else
b_digit := ''
// 节内"百"位.
if (len > 3) then
q_digit := Copy(intstr, len - 3, 1)
else
q_digit := ''
// 节内"千"位.
if (len > 4) then
Delete(intstr, len - 3, 4)
else
intstr := '';
len := Length(intstr);
//对本节进行中文翻译.
zerohead := false;
if (g_digit <> '0') then
tstr := chn_number[StrToInt(g_digit)]
else
tstr := ''
//完成"个"位中文翻译.
if (s_digit = '0') then
s_digit := ''
//完成"拾"位中文翻译.
if (s_digit <> '') then
begin
tstr := chn_number[StrToInt(s_digit)] + '拾' + tstr;
zerohead := false;
end
else if (tstr <> '') then
begin
tstr := '零' + tstr;
zerohead := true;
end;
if (b_digit = '0') then
b_digit := ''
//完成"佰"位中文翻译.
if (b_digit <> '') then
begin
tstr := chn_number[StrToInt(b_digit)] + '佰' + tstr;
zerohead := false;
end
else if (tstr <> '') and not (zerohead) then
begin
tstr := '零' + tstr;
zerohead := true;
end;
if (q_digit = '0') then
q_digit := ''
//完成"千"位中文翻译.
if (q_digit <> '') then
begin
tstr := chn_number[StrToInt(q_digit)] + '仟' + tstr;
zerohead := false;
end
else if (tstr <> '') and not (zerohead) then
begin
tstr := '零' + tstr;
zerohead := true;
end;
if (tstr <> '') then
begin
result := tstr + chn_sectionunit[sectionlevel] + result;
zeroresulthead := zerohead;
end
else if not (zeroresulthead) then
begin
result := '零' + result;
zeroresulthead := true;
end;
end
// of while
if (zeroresulthead) then
Delete(result, 1, 2)
// 除首"零"
result := signstr + result;
if RightStr(result, 1) = '零' then
result := Copy(result, 1, Length(result) - 2);
end;
//********************************************************//
// 金额转换 //
//********************************************************//
function chn_money(money: double): string;
var
intpart, chiao, cent: integer;
fracpart: double;
signstr, tstr: string;
begin
if money > 2147483647.994999 then
begin
result := '数据过大,无法显示!数据必须小于2147483647.994999!';
Exit;
end;
signstr := ''
// 符号
if (money < 0) then
begin
money := -money;
signstr := '负';
end;
money := money + 0.005
//准备四舍五入 1.996
intpart := Trunc(money)
//取得金额四舍五入后的整数部分 2
fracpart := money - intpart;
fracpart := fracpart * 10;
chiao := Trunc(fracpart)
//角
fracpart := fracpart - chiao;
fracpart := fracpart * 10;
cent := Trunc(fracpart)
//分
tstr := chn_intvalue(intpart)
//整数部分(不加元)的大写
if tstr = '金额过大无法显示!' then
begin
result := tstr;
Exit;
end;
//******************************************************//
{.00}
if (chiao = 0) and (cent = 0) then
result := tstr + '元整';
{.09}
if (chiao = 0) and (cent <> 0) then //0.7
result := tstr + '元零' + chn_number[cent] + '分';
{.90}
if (chiao <> 0) and (cent = 0) then
begin
if intpart = 0 then
result := '零元' + chn_number[chiao] + '角整'
else if gw = 0 then // 个位是0
result := tstr + '元零' + chn_number[chiao] + '角整'
else
result := tstr + '元' + chn_number[chiao] + '角整';
end;
{.99}
if (chiao <> 0) and (cent <> 0) then
begin
if intpart = 0 then
result := '零元' + chn_number[chiao] + '角' + chn_number[cent] + '分'
else if gw = 0 then // 个位是0
result := tstr + '元零' + chn_number[chiao] + '角' + chn_number[cent] + '分'
else
result := tstr + '元' + chn_number[chiao] + '角' + chn_number[cent] + '分';
end;
//******************************************************//
result := signstr + result;
end;
initialization // 初始化必须放在最后。。不然会初始化后的函数会被提示出错
chn_number[0] := '零';
chn_number[1] := '壹';
chn_number[2] := '贰';
chn_number[3] := '叁';
chn_number[4] := '肆';
chn_number[5] := '伍';
chn_number[6] := '陆';
chn_number[7] := '柒';
chn_number[8] := '捌';
chn_number[9] := '玖';
chn_sectionunit[0] := '';
chn_sectionunit[1] := '万';
chn_sectionunit[2] := '亿';
end.