用于将小写的数值翻译成大写的字符串(支持到分,即小数点后两位) 人民币 陆佰贰拾叁元捌角捌分
交谈中请勿轻信汇款、中奖消息,勿轻易拨打陌生电话。
第13群管理员YC(358828429) 11:45:06
Icy`(704121261) 10:31:47
1234转换成一千二百三十四
小兵<wlb.wlb@163.com> 11:46:04
手动写个函数来实现吧。
Icy`(704121261) 11:46:16
用C#
第13群管理员YC(358828429) 11:46:49
我有一个sql自定义函数,要不
Icy`(704121261) 11:47:03
看下
第13群管理员YC(358828429) 11:47:14
--举例:select dbo.fn_ChnMoney(623.88)
-- 结果为“陆佰贰拾叁元捌角捌分”
Icy`(704121261) 11:47:40
嗯,可以,发给我
第13群管理员YC(358828429) 11:48:00
--功能: 用于将小写的数值翻译成大写的字符串(支持到分,即小数点后两位)
--入口参数:@decNum------数字型变量
--返回:字符串
--举例:select dbo.fn_ChnMoney(623.88)
-- 结果为“陆佰贰拾叁元捌角捌分”
CREATE FUNCTION fn_ChnMoney(@decNum decimal(18,2))
RETURNS varchar(200)
AS
BEGIN
DECLARE @chvNum varchar(200)
DECLARE @chvMoney varchar(200)
DECLARE @chvTemp varchar(200)
DECLARE @intIntLen int
DECLARE @intI int
DECLARE @chvTempI varchar(200)
DECLARE @chvReturn varchar(200)
IF @decNum=0
SET @chvMoney = '零'
Else
BEGIN
SET @chvTemp=convert(varchar(200),Round(@decNum*100,0))
IF charindex('.',@chvTemp,1)>0
SET @chvNum=left(@chvTemp,charindex('.',@chvTemp,1)-1)
ELSE
SET @chvNum=@chvTemp
SET @intIntLen=len(@chvNum)
SET @chvMoney=''
Set @chvReturn = ''
SET @intI=1
WHILE @intI <= @intIntLen
BEGIN
SET @chvTempI = substring(@chvNum,@intIntLen-@intI+1,1)
SET @chvMoney = substring('零壹贰叁肆伍陆柒捌玖',convert(int,@chvTempI)+1,1) + substring('分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟京拾佰仟',(@intI-1)+1,1)
SET @intI = @intI + 1
SET @chvReturn = @chvMoney + @chvReturn
END
END
SET @chvReturn=Replace(@chvReturn,'零仟','零')
SET @chvReturn=Replace(@chvReturn,'零佰','零')
SET @chvReturn=Replace(@chvReturn,'零拾','零')
while charindex('零零',@chvReturn,1)>0
SET @chvReturn=Replace(@chvReturn,'零零','零')
SET @chvReturn=Replace(@chvReturn,'零兆','兆')
SET @chvReturn=Replace(@chvReturn,'零亿','亿')
SET @chvReturn=Replace(@chvReturn,'零万','万')
SET @chvReturn=Replace(@chvReturn,'零元','元')
SET @chvReturn=Replace(@chvReturn,'零角零分','整')
SET @chvReturn=Replace(@chvReturn,'零角','零')
SET @chvReturn=Replace(@chvReturn,'零分','整')
SET @chvReturn=LTRIM(RTRIM(@chvReturn))
RETURN @chvReturn
END
Icy`(704121261) 11:48:39
晕咯,这么长啊
第13群管理员YC(358828429) 11:48:42
看起来负责,但是这个函数我们用了6,7年了
第13群管理员YC(358828429) 11:48:53
看起来复杂,但是这个函数我们用了6,7年了
第13群管理员YC(358828429) 11:49:10
我们处理的是房地产合同里面的金额
Icy`(704121261) 11:49:40
嗯
肥仔鱼(5673229) 11:52:23
厉害
肥仔鱼(5673229) 11:52:43
我以前是delphi下写的,要不要?
D.Y.破晓(51325749) 11:53:01
看了下,不错
第13群管理员YC(358828429) 11:55:16
金额转换大写,还要考虑我们的规范哦
肥仔鱼(5673229) 11:55:38
function TBs.F2C(r: real): string;
var
tmp1,rr,XiaoShu :string;
l,i,j,k:integer;
const n1:array[0..9] of string=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
const n2:array[0..3] of string=('','拾','佰','仟');
const n3:array[0..2] of string=('元','万','亿');
begin
tmp1:=FormatFloat('#.00',r);
l:=length(tmp1);
rr:='';
if strtoint(tmp1[l])<>0 then
begin
rr:='分';
rr:=n1[strtoint(tmp1[l])]+rr;
end;
if strtoint(tmp1[l-1])<>0 then
begin
rr:='角'+rr;
rr:=n1[strtoint(tmp1[l-1])]+rr;
end
else
begin
rr:='零'+rr;
rr:=n1[strtoint(tmp1[l-1])]+rr;
end;
XiaoShu:=rr;
i:=l-3;
j:=0;k:=0;
rr:='';
while i>0 do
begin
if j mod 4=0 then
begin
rr:=n3[k]+rr;
inc(k);if k>2 then k:=1;
j:=0;
end;
if strtoint(tmp1[i])<>0 then
rr:=n2[j]+rr;
rr:=n1[strtoint(tmp1[i])]+rr;
inc(j);
dec(i);
end;
while pos('零零',rr)>0 do
rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
rr:=stringreplace(rr,'零亿','亿零',[rfReplaceAll]);
while pos('零零',rr)>0 do
rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
rr:=stringreplace(rr,'零万','万零',[rfReplaceAll]);
while pos('零零',rr)>0 do
rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
rr:=stringreplace(rr,'零元','元零',[rfReplaceAll]);
while pos('零零',rr)>0 do
rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
rr:=stringreplace(rr,'亿万','亿',[rfReplaceAll]);
//if copy(rr,length(rr)-1,2)='零' then
//rr:=copy(rr,1,length(rr)-2);
rr:=rr+XiaoShu; //加上角和分
while pos('零零',rr)>0 do
rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
if copy(rr,length(rr)-1,2)='零' then
rr:=copy(rr,1,length(rr)-2);
if copy(rr,length(rr)-1,2)<>'分' then
rr:=rr+'整';
result:=rr;
end;
Icy`(704121261) 11:55:50
delphi 我不懂
肥仔鱼(5673229) 11:55:51
delphi7的,哈哈
D.Y.破晓(51325749) 11:56:14
第13群管理员YC(358828429) 11:56:19
哈哈,真是代码大会集啊
第13群管理员YC(358828429) 11:56:40
收集起来,发到网上帮助人
肥仔鱼(5673229) 11:56:43
其实有时候大家都很懒,都懒得找
LeoKing(83500337) 12:34:29
string ReturnCh=string.Empty ;
switch(ch)
{
case '0':
ReturnCh="零";
break;
case '1':
ReturnCh="壹";
break;
case '2':
ReturnCh="贰";
break;
case '3':
ReturnCh="叁";
break;
case '4':
ReturnCh="肆";
break;
case '5':
ReturnCh="伍";
break;
case '6':
ReturnCh="陆";
break;
case '7':
ReturnCh="柒";
break;
case '8':
ReturnCh="捌";
break;
case '9':
ReturnCh="玖";
break;
default:
break;
}
return ReturnCh;
LeoKing(83500337) 12:34:42
这是哪位高人写的程序呀?
LeoKing(83500337) 12:34:54
太强了
小兵<wlb.wlb@163.com> 12:35:26
为什么说这段程序强呢
posted on 2008-07-30 12:44 neil-zhao 阅读(1378) 评论(1) 编辑 收藏 举报