【delphi开源代码栏目提醒】:网学会员,鉴于大家对delphi开源代码十分关注,论文会员在此为大家搜集整理了“money.pas”一文,供大家参考学习!
unit money;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
function numTostr(ls: variant): string;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.numTostr(ls: variant): string;
var
dx_sz, dx_dw, str_int, str_dec, dx_str, fu: string;
a, b, b2, c, d: string;
num_int, num_dec, len_int, i, a_int, pp: integer;
begin
dx_sz := '零壹贰叁肆伍陆柒捌玖';
//dx_sz的意思是大写数字,用来把数字转换成大写数字
dx_dw := '万仟佰拾亿仟佰拾万仟佰拾元';
//dx_dw的意思是大写单位,用来添加每一位的单位
if ls < 0 then //处理金额小于零情况
begin
ls := ls * ( -1); //ls参数为传入的金额数,若为负则先转成正处理
fu := '负'; //并且前面写上负字
end
else
fu := ''; //否则前面不写字
dx_str := ls;
//dx_str为返回字符串,首先以处理为正的参数传给它
if (ls > 0) and (ls < 1) //对小数值,前面添加0防止出现输入为.xx的情况
then
dx_str := '0' + dx_str;
pp := pos('.', dx_str); //获得小数点的位置,准备开始分离整数和小数
if pp > 0
//如果确实存在小数点则把整数部分放到str_int字符串中
then
str_int := copy(dx_str, 1, pos('.', dx_str) - 1)
else
str_int := dx_str; //否则就意味着本来就是整数,这样把它整个赋给str_int
num_int := StrToInt(str_int); //把整数部分从字符串转成数字
if (ls > 0) and (ls < 1)
//以上部分为取得整数部分,以下为取得小数值及小数串
then
num_dec := ls * 100 //如果本来就是小数,那么把它乘以100变成整数以便处理
else
num_dec := (ls - num_int) * 100; //否则减去整数部分,再把它乘以100变成整数以便处理
str_dec := IntToStr(num_dec); //获得小数部分的字符串
len_int := Length(str_int); //获得整数部分的长度,准备处理整数部分
dx_str := ''; //把结果字符串先清空
for i := 1 to len_int do //以下开始处理整数部分
begin //处理整数字符串的每一位
a := copy(str_int, i, 1); //a为小写数字字符
a_int := StrToInt(a); //把小写数字字符转成数字
b := copy(dx_sz, (a_int * 2 + 1), 2);
//b为对应的大写字符,从dx_sz这个串的相应位置得到
c := copy(dx_dw, ((13 - len_int + i - 1) * 2 + 1), 2);
//c为对应大写单位,从dx_dw这个串的相应位置得到
if dx_str <> '' //d为当前大写字符串的最后一个汉字
then
d := copy(dx_str, Length(dx_str) - 1, 2)
else
d := '';
if (b = '零') and ((d = '零') or (b = b2) or (c = '元') or (c = '万') or (c = '亿')) then
b := ''; //对于零万零亿零元等情况,这个位不起作用,不用表示
if (a = '0') and (c <> '元') and (c <> '万') and (c <> '亿') then
c := ''; //对于数字为0的情况,不用处理其单位
if ((c = '元') or (c = '万') or (c = '亿')) and (d = '零') and (a = '0') then
begin //处理本位为元万亿这些单位位,但是数值为0的情形
dx_str := copy(dx_str, 1, Length(dx_str) - 2);//此情形下最后一位汉字应删除
d := copy(dx_str, Length(dx_str) - 1, 2); //仍取d为新的最后一位汉字
if ((c = '元') and (d = '万')) or ((c = '万') and (d = '亿')) then
c := ''; //此种情形下字符串的最后一位不需当前单位修饰
end;
dx_str := dx_str + b + c; //结果字符串添加本位数字和单位
b2 := b; //保存当前数字的大写字符,留作后用
end;
if Length(dx_str) <= 2
//开始处理金额小于1的情况,也就是处理小数情形
then
dx_str := ''; //若结果字符串小于等于一个汉字长,则删除
if (num_dec < 10) and (ls > 0) //开始转换小数部分
then
begin //如果只是多少分
a_int := StrToInt(str_dec); //先把字符串转成整数
b := copy(dx_sz, (a_int * 2 + 1), 2); //获得相应的大写字符
if num_dec = 0
//如果小数部分为0,则整个是个整数金额,添上整字
then
dx_str := dx_str + '整';
if num_dec > 0 then
dx_str := dx_str + '零' + b + '分'; //否则添上多少分
end;
if num_dec >= 10 //有多少角的情形
then
begin
a_int := StrToInt(copy(str_dec, 1, 1)); //首先处理角,得到角的数字
a := copy(dx_sz, (a_int * 2 + 1), 2); //获得多少角的大写字符
a_int := StrToInt(copy(str_dec, 2, 1)); //处理分,得到分的数字
b := copy(dx_sz, (a_int * 2 + 1), 2); //获得多少分的大写字符
if a <> '零' //若非是0角
then
a := a + '角'; //则添加上角字
if b <> '零' //若非是0分
then
b := b + '分' //则添上分字
else
b := '';
//否则不写任何关于分的情况,这里不用写a='',因为整数金额的情形已经处理过了
dx_str := dx_str + a + b; //结果字符串添上角和分的情形
end;
if ls = 0 //若本来就是0
then
dx_str := '零元整'; //则结果就是零元整
dx_str := fu + dx_str; //结果字符串添上符号
Result := dx_str; //函数返回字符串
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := numTostr(Edit1.Text); //转换
end;
end.