我写的一个存储过程,不过只能在SQL中转换.CREATE PROCEDURE dbo.L2U
(
@n_LowerMoney numeric(15,2),
@v_TransType int,
@RET VARCHAR(200) output
)
AS
Declare @v_LowerStr VARCHAR(200) -- 小写金额
Declare @v_UpperPart VARCHAR(200)
Declare @v_UpperStr VARCHAR(200) -- 大写金额
Declare @i_I intset nocount onselect @v_LowerStr = LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) --四舍五入为指定的精度并删除数据左右空格select @i_I = 1
select @v_UpperStr = ''while ( @i_I <= len(@v_LowerStr))
begin
select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)
WHEN '.' THEN '元'
WHEN '0' THEN '零'
WHEN '1' THEN '壹'
WHEN '2' THEN '贰'
WHEN '3' THEN '叁'
WHEN '4' THEN '肆'
WHEN '5' THEN '伍'
WHEN '6' THEN '陆'
WHEN '7' THEN '柒'
WHEN '8' THEN '捌'
WHEN '9' THEN '玖'
END
+
case @i_I
WHEN 1 THEN '分'
WHEN 2 THEN '角'
WHEN 3 THEN ''
WHEN 4 THEN ''
WHEN 5 THEN '拾'
WHEN 6 THEN '佰'
WHEN 7 THEN '仟'
WHEN 8 THEN '万'
WHEN 9 THEN '拾'
WHEN 10 THEN '佰'
WHEN 11 THEN '仟'
WHEN 12 THEN '亿'
WHEN 13 THEN '拾'
WHEN 14 THEN '佰'
WHEN 15 THEN '仟'
WHEN 16 THEN '万'
ELSE ''
END
select @v_UpperStr = @v_UpperPart + @v_UpperStr
select @i_I = @i_I + 1
end--------print '//v_UpperStr ='+@v_UpperStr +'//'if ( @v_TransType=0 )
begin
select @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')
select @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')
select @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')
select @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')
select @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')
select @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
end-- 对壹元以下的金额的处理
if ( substring(@v_UpperStr,1,1)='元' )
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif (substring(@v_UpperStr,1,1)= '零')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif (substring(@v_UpperStr,1,1)='角')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif ( substring(@v_UpperStr,1,1)='分')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif (substring(@v_UpperStr,1,1)='整')
begin
select @v_UpperStr = '零元整'
endselect @ret=@v_UpperStr
GO
(
@n_LowerMoney numeric(15,2),
@v_TransType int,
@RET VARCHAR(200) output
)
AS
Declare @v_LowerStr VARCHAR(200) -- 小写金额
Declare @v_UpperPart VARCHAR(200)
Declare @v_UpperStr VARCHAR(200) -- 大写金额
Declare @i_I intset nocount onselect @v_LowerStr = LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) --四舍五入为指定的精度并删除数据左右空格select @i_I = 1
select @v_UpperStr = ''while ( @i_I <= len(@v_LowerStr))
begin
select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)
WHEN '.' THEN '元'
WHEN '0' THEN '零'
WHEN '1' THEN '壹'
WHEN '2' THEN '贰'
WHEN '3' THEN '叁'
WHEN '4' THEN '肆'
WHEN '5' THEN '伍'
WHEN '6' THEN '陆'
WHEN '7' THEN '柒'
WHEN '8' THEN '捌'
WHEN '9' THEN '玖'
END
+
case @i_I
WHEN 1 THEN '分'
WHEN 2 THEN '角'
WHEN 3 THEN ''
WHEN 4 THEN ''
WHEN 5 THEN '拾'
WHEN 6 THEN '佰'
WHEN 7 THEN '仟'
WHEN 8 THEN '万'
WHEN 9 THEN '拾'
WHEN 10 THEN '佰'
WHEN 11 THEN '仟'
WHEN 12 THEN '亿'
WHEN 13 THEN '拾'
WHEN 14 THEN '佰'
WHEN 15 THEN '仟'
WHEN 16 THEN '万'
ELSE ''
END
select @v_UpperStr = @v_UpperPart + @v_UpperStr
select @i_I = @i_I + 1
end--------print '//v_UpperStr ='+@v_UpperStr +'//'if ( @v_TransType=0 )
begin
select @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
select @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')
select @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')
select @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')
select @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')
select @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')
select @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
select @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
end-- 对壹元以下的金额的处理
if ( substring(@v_UpperStr,1,1)='元' )
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif (substring(@v_UpperStr,1,1)= '零')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif (substring(@v_UpperStr,1,1)='角')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif ( substring(@v_UpperStr,1,1)='分')
begin
select @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif (substring(@v_UpperStr,1,1)='整')
begin
select @v_UpperStr = '零元整'
endselect @ret=@v_UpperStr
GO
解决方案 »
- C#调用C++ DLL(结构体中二维数组转换)
- 在做一个项目很多页面都要用到同样的方法,现在想把这个方法写在一个公共类里面做公共方法,请问应该用静态类静态方法还是用非静态类静态方法?
- WCF数据契约问题
- vs2008各大版本的区别
- 我的VS IDE怎么打点之后什么都没有啊?
- 【菜鸟提问】当程序在运算的时候,画面就定住了,然后客户就会很无聊,那如何让客户不无聊呢?
- 试编一段程序出现点问题~public bool InitializeGraphics()
- c#大型程序如何开发?
- 这个分页存储过程在C#里怎么用?
- 特急求教:"此时无法调用方法" 异常是怎么回事!!!
- 请帮我解释一个XPath表达式问题?谢谢
- C#里怎样实现UTF-8编码和gb2312编码之间的转换
using System;namespace TMS
{
/// <summary>
/// AMT_GB2312 的摘要说明。
/// </summary>
public class AMT_GB2312
{
public AMT_GB2312()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public string ConvertToGB2312(double amount)
{
string m_str,m_int,m_dec;
int m_pos,m_len; m_str = System.Convert.ToString(amount);
m_len = m_str.Length;
m_pos = m_str.IndexOf('.',0);
m_dec = "00";
if (m_pos ==-1)
m_int = m_str;
else
{
m_int = m_str.Substring(0,m_pos);
m_dec = m_str.Substring(m_pos+1 ,m_len -m_pos-1);
m_dec = m_dec.PadRight(2,'0');
m_dec = m_dec.Substring(0,2);
} m_int = m_int.PadLeft(12,'0'); m_str = "";
if (m_int.Substring(0,4) != "0000")
{
m_str += ConvertTo9999(m_int.Substring(0,4)) + "亿";
} if (m_int.Substring(4,4) != "0000")
{
m_str += ConvertTo9999(m_int.Substring(4,4)) + "万";
}
if (m_int.Substring(8,4) != "0000")
{
m_str += ConvertTo9999(m_int.Substring(8,4)) + "圆";
} if (m_dec !="00")
{
m_str += ConvertDec(m_dec);
}
else
{
m_str += "整";
} return m_str; }
private string ConvertTo9999(string m_part)
{
string m_str;
int m_val,m_tmp;
m_str = "";
m_val = (int)System.Convert.ToInt32(m_part,10);
m_tmp = (int)m_val/1000;
switch(m_tmp)
{
case 1:
m_str = "壹仟";
break;
case 2:
m_str = "贰仟";
break;
case 3:
m_str = "叁仟";
break;
case 4:
m_str = "肆仟";
break;
case 5:
m_str = "伍仟";
break;
case 6:
m_str = "陆仟";
break;
case 7:
m_str = "柒仟";
break;
case 8:
m_str = "捌仟";
break;
case 9:
m_str = "玖仟";
break;
default:
break;
} m_val = m_val -(m_tmp*1000);
m_tmp = (int)m_val/100; switch(m_tmp)
{
case 1:
m_str += "壹佰";
break;
case 2:
m_str += "贰佰";
break;
case 3:
m_str += "叁佰";
break;
case 4:
m_str += "肆佰";
break;
case 5:
m_str += "伍佰";
break;
case 6:
m_str += "陆佰";
break;
case 7:
m_str += "柒佰";
break;
case 8:
m_str += "捌佰";
break;
case 9:
m_str += "玖佰";
break;
default:
break;
}
m_val = m_val -(m_tmp*100);
m_tmp = (int)m_val/10; switch(m_tmp)
{
case 1:
m_str += "壹拾";
break;
case 2:
m_str += "贰拾";
break;
case 3:
m_str += "叁拾";
break;
case 4:
m_str += "肆拾";
break;
case 5:
m_str += "伍拾";
break;
case 6:
m_str += "陆拾";
break;
case 7:
m_str += "柒拾";
break;
case 8:
m_str += "捌拾";
break;
case 9:
m_str += "玖拾";
break;
default:
break;
} m_val = m_val -(m_tmp*10);
m_tmp = (int)m_val%10; switch(m_tmp)
{
case 1:
m_str += "壹";
break;
case 2:
m_str += "贰";
break;
case 3:
m_str += "叁";
break;
case 4:
m_str += "肆";
break;
case 5:
m_str += "伍";
break;
case 6:
m_str += "陆";
break;
case 7:
m_str += "柒";
break;
case 8:
m_str += "捌";
break;
case 9:
m_str += "玖";
break;
default:
break;
} return m_str; }
private string ConvertDec(string m_part)
{
string m_str;
int m_val; m_str = "";
m_val = (int)System.Convert.ToInt32(m_part,10)/10;
switch(m_val)
{
case 1:
m_str = "壹角";
break; case 2:
m_str = "贰角";
break;
case 3:
m_str = "叁角";
break;
case 4:
m_str = "肆角";
break;
case 5:
m_str = "伍角";
break;
case 6:
m_str = "陆角";
break;
case 7:
m_str = "柒角";
break; case 8:
m_str = "捌角";
break;
case 9:
m_str = "玖角";
break;
default:
break; } m_val = (int)System.Convert.ToInt32(m_part,10)%10; switch(m_val)
{
case 1:
m_str += "壹分";
break; case 2:
m_str += "贰分";
break;
case 3:
m_str += "叁分";
break;
case 4:
m_str += "肆分";
break;
case 5:
m_str += "伍分";
break;
case 6:
m_str += "陆分";
break;
case 7:
m_str += "柒分";
break; case 8:
m_str += "捌分";
break;
case 9:
m_str += "玖分";
break;
default:
break; }
return m_str;
}
}
}
RETURNS Nvarchar(4000) AS
BEGIN
declare @rV Nvarchar(4000)declare @tmpstr Nvarchar(4000),@M Nvarchar(4000),@K Nvarchar(4000),@I numeric(38,2),
@J int,@lastJ int,@LastV Nvarchar(10),@LastF Nvarchar(10),@LastE Nvarchar(10),@LastVE Nvarchar(10)
set @I=@inputIdset @K=N''if @I<0
begin
set @I=0-@I
set @K=N'负'
end
if @I=0 return N'零元整'select @tmpstr=N'零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿拾佰仟',@M=cast(cast(@I*100 as bigint) as varchar(800)),@J=len(@M),@LastVE=N''
while @J>=1
begin
set @LastF=substring(@tmpstr, cast(substring(@m,len(@M)-@j+1,1) as bigint)+1,1)
set @LastE=substring(@tmpstr,10+@J,1)
if @LastF<>N'零'
begin if @LastV=N'零'
if ((@lastJ>=7 and @j<7) or (@lastJ>=11 and @j<11 ) or (@lastJ>=3 and @j<3))
if (@J<=2 and @lastJ<=11 and @lastJ>2) or (@lastJ>=12 and @j=2 and @LastV=N'零')
set @K=@K+@LastVE+@LastF+@LastE
else
set @K=@K+@LastVE+@LastV+@LastF+@LastE
else
set @K=@K+@LastV+@LastF+@LastE
else
set @K=@K+@LastF+@LastE
select @lastJ=@j,@LastVE=N''
end
else
begin
if @LastVE=N'' and @lastJ>11 set @LastVE=N'亿'
if @LastVE=N'' and @lastJ>7 and @lastJ<10 set @LastVE=N'万' if ((@LastVE=N'' and @lastJ<7) or (@LastVE=N'万'and @lastJ<11 and @lastJ>9) or ((@LastVE=N'亿' or @LastVE=N'') and @lastJ>15 ))
or (@J=3 and @lastJ>=7)
set @LastVE=@LastVE+N'元' if @LastV<>N'零' set @lastJ=@j
if @j=2
if substring(@tmpstr, cast(substring(@m,len(@M)-@j+2,1) as bigint)+1,1)<>N'零'
and @lastJ<12 set @LastVE=@LastVE+N'零'
end
set @LastV=@LastF
set @J=@J-1
endif @lastJ>=6 or (@LastVE=N'零' and @lastJ=1) set @K=@K+@LastVE
if @lastJ>=3 and @lastJ<=5 set @K=@K+N'元'
if @lastJ>=2 or (@lastJ=1 and @lastV=N'零') set @K=@K+N'整'set @rv=@K return @rv
END
先试试再说吧,我昨晚写的
我每次只考虑一个数字,所以不会出现零零的情况,因为每个数字后面都有单位
如:1234567890.25
壹拾贰亿叁仟肆佰伍拾陆万柒扦捌佰玖拾圆贰角伍分
应该是:壹仟零壹拾圆零贰分10000.02-->壹万壹分0-->整