如何把数字转为中文大写(大写人民币的形式)

rico644 2005-12-27 02:48:56
急...请大虾,高手,指点............
...全文
363 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
耙子 2005-12-27
  • 打赏
  • 举报
回复
居然有人顶我 :)
xzhifei 2005-12-27
  • 打赏
  • 举报
回复
顶耙子
猛禽 2005-12-27
  • 打赏
  • 举报
回复
支持pazee
ihihonline 2005-12-27
  • 打赏
  • 举报
回复
看看俺现在是不是成了一个星
CDSoftwareWj 2005-12-27
  • 打赏
  • 举报
回复
pazee(耙子)

高~~~实在是高~~!

楼主听pazee的吧 改行吧,这行太危险~~
zhangl_cn 2005-12-27
  • 打赏
  • 举报
回复
网上很多的,搜一下吧
adamsun 2005-12-27
  • 打赏
  • 举报
回复
把“元”改成“圆”,哈哈
adamsun 2005-12-27
  • 打赏
  • 举报
回复
mastersky(浪)的代码,测试通过!
nice going~
mastersky 2005-12-27
  • 打赏
  • 举报
回复
Function CapitalizeMoney(aMoney: Double; aIsUnit: Boolean; var oMoneyStr:
string): string; //小写人民币转换成大写人民币
function InttoUpperCase(Xiao: string): string;
begin
case StrToInt(Xiao) of
0: Result := '零';
1: Result := '壹';
2: Result := '贰';
3: Result := '叁';
4: Result := '肆';
5: Result := '伍';
6: Result := '陆';
7: Result := '柒';
8: Result := '捌';
9: Result := '玖';
end;
end;

var
IntPart: string;
DecPart: string;
RMBDecAry: array[0..3] of string[2];
RMBIntAry: array[0..17] of string[2];
LenIntPart: Integer;
i, j: Integer;
begin
try
if aMoney > 100000000 then
begin
Result := '数值超出范围!';
Exit;
end;
//初始化
for i := 0 to 3 do RMBDecAry[i] := '';
for i := 0 to 17 do RMBIntAry[i] := '';
RMBIntAry[0] := '元';
RMBIntAry[2] := '拾';
RMBIntAry[4] := '佰';
RMBIntAry[6] := '仟';
RMBIntAry[8] := '万';
RMBIntAry[10] := '拾';
RMBIntAry[12] := '佰';
RMBIntAry[14] := '仟';
RMBIntAry[16] := '亿';
//分解数字
IntPart := IntToStr(trunc(aMoney));
DecPart := FormatFloat('0.00', aMoney);
DecPart := Copy(DecPart, Length(DecPart) - 1, 2);
//先判断小数位(角分)
if aIsUnit then
begin
if DecPart = '00' then DecPart := ''
else
begin
RMBDecAry[0] := InttoUpperCase(DecPart[1]);
if DecPart[1] <> '0' then RMBDecAry[1] := '角';
if Decpart[2] <> '0' then
begin
RMBDecAry[2] := InttoUpperCase(DecPart[2]);
RMBDecAry[3] := '分';
end;
DecPart := '';
for i := 0 to 3 do DecPart := DecPart + RmbDecAry[i];
end;
end
else //分开
begin
DecPart := IntToUpperCase(DecPart[1]) + ' ' + IntToUpperCase(DecPart[2])
+
' ';
end;
//判断整数位
if IntPart = '0' then IntPart := ''
else
begin
LenIntPart := Length(IntPart);
for i := 0 to LenIntPart - 1 do
RMBIntAry[i * 2 + 1] := InttoUpperCase(IntPart[LenIntPart - i]);
if not aIsUnit then
begin //分开
IntPart := '';
for i := LenIntPart - 1 downto 0 do
IntPart := IntPart + RMBIntAry[i * 2 + 1] + ' ';
end
else
begin
i := 0;
while IntPart[LenIntPart - i] = '0' do
begin //判断10的倍数
if (i <> 0) and (RMBIntAry[i * 2] <> '万') then
RMBIntAry[i * 2] := '';
RMBIntAry[i * 2 + 1] := '';
i := i + 1;
end;
j := 0;
//除零判断,第一位,最后一位不为零
for i := 1 to LenIntPart * 2 - 1 do //从个位开始
if (RMBIntAry[i] = '零') then
if j = 0 then
begin
j := i; //第一个0
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end
else //不是第一个零
begin
if i - j > 2 then
begin
j := i; //零中间有间隔
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end
else //删除前一个零
begin
j := i;
RMBIntAry[j] := '';
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end;
end;
if RMBIntAry[9] = '零' then RMBIntAry[9] := ''; //万前的零判断
IntPart := '';
for i := 0 to LenIntPart * 2 - 1 do IntPart := RMBIntAry[i] + IntPart;
LenIntPart := Length(IntPart);
if Copy(IntPart, 1, 4) = '壹拾' then
Intpart := Copy(IntPart, 3, LenIntPart); //壹拾判断
end;
end;
oMoneyStr := IntPart + DecPart;
except
Result := '错误';
end;
end;
vfork 2005-12-27
  • 打赏
  • 举报
回复
有一个问题,当你输入100.10(有几个零),
输出为:壹佰零拾零元壹角零分
认为有用就自己修改一下用吧!

//----------------------------------
// 函数功能:将金额转换的大写金额
// 入口参数:small 小写金额
// 返 回 值:大写金额
function SmallTOBig(small:real):string;
var
SmallMonth,BigMonth :string;
wei1,qianwei1 :string[2];
qianwei,dianweizhi,qian :integer;
begin
//小数点后的位置,需要的话也可以改动-2值
qianwei:=-2;
//转换成货币形式,需要的话小数点后加多几个零
Smallmonth:=FormatFloat('0.00',small);
dianweizhi:=pos('.',Smallmonth); //小数点的位置
//循环小写货币的每一位,从小写的右边位置到左边
for qian:=length(Smallmonth) downto 1 do
begin
//如果读到的不是小数点就继续}
if qian<>dianweizhi then
begin
//位置上的数转换成大写}
case strtoint(copy(Smallmonth,qian,1)) of
1:wei1:='壹'; 2:wei1:='贰';
3:wei1:='叁'; 4:wei1:='肆';
5:wei1:='伍'; 6:wei1:='陆';
7:wei1:='柒'; 8:wei1:='捌';
9:wei1:='玖'; 0:wei1:='零';
end;
//判断大写位置,可以继续增大到real类型的最大值}
case qianwei of
-3:qianwei1:='厘';
-2:qianwei1:='分';
-1:qianwei1:='角';
0 :qianwei1:='元';
1 :qianwei1:='拾';
2 :qianwei1:='佰';
3 :qianwei1:='千';
4 :qianwei1:='万';
5 :qianwei1:='拾';
6 :qianwei1:='佰';
7 :qianwei1:='千';
8 :qianwei1:='亿';
9 :qianwei1:='十';
10:qianwei1:='佰';
11:qianwei1:='千';
end;
inc(qianwei);
BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}
end;
end;
SmallTOBig:=BigMonth;
end;
耙子 2005-12-27
  • 打赏
  • 举报
回复
这类的代码还“急...请大虾,高手,指点”
改行吧!
famer 2005-12-27
  • 打赏
  • 举报
回复
网上有现成的。www.baidu.com搜

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧