用于将小写的数值翻译成大写的字符串(支持到分,即小数点后两位) 人民币 陆佰贰拾叁元捌角捌分

  交谈中请勿轻信汇款、中奖消息,勿轻易拨打陌生电话。

第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编辑  收藏  举报

导航