我想在fast report的基础上把金额小写转换成大写,我用的是免费的,在函数里面找不到,有没有语句执行下就可以,谢谢
解决方案 »
- 请教:chm文件打开如何跳转到某一标题?
- 据说四个三角可以散200分,有人结贴咱升级,散分!!!!
- 有没有函数或办法可以一下子知道一张表的记录数?
- delphi and oracle的动态查询
- 请问:我在一个panel面板上放了一个TImage派生的一个组件,在该组件代码中我应该怎样才能得到panel面板的背景,又怎样才能使组件的背景透
- 预览绘制好的图形时,改变显示比例后,原比例的图形仍然存在,怎么办?
- 我有一个窗口form1,我所有的程序都需要这个窗口,请提供方法以避免我来回复制!
- 急问李维的Email!有谁知道,能否立即告知小弟?
- 请教一个报表的问题
- 获取Memo控件当前选取的文本内容,和当前光标所在的行、列?
- cxgrid 的问题 望指点
- dbgrideh 滚动条大小
RETURNS varchar(20)
AS
BEGIN
--将整型数字转换为大写汉字的自定义函数,如123084转换为'壹贰叁零捌肆'
-- 调用 select dbo.[f_digit_chn](12345678)
DECLARE @result varchar(20),@symbol varchar(2)
IF @num<0
SELECT @symbol='负',@result='',@num=ABS(@num)
ELSE
SELECT @symbol='',@result=''
WHILE @num<>0
SELECT @result=SUBSTRING('零壹贰叁肆伍陆柒捌玖拾',@num%10+1,1)+@result,@num=@num/10
RETURN @symbol+@result
ENDselect dbo.[f_digit_chn](1394)
--------------------
壹叁玖肆
版本:1.0
创建时间:20020227
修改时间:
功能:小写金额转换成大写
参数:n_LowerMoney 小写金额
v_TransType 种类 -- 1: directly translate, 0: read it in words
输出:大写金额
********************************************************/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[L2U]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[L2U]
GOCREATE FUNCTION dbo.L2U(@n_LowerMoney numeric(15,2),@v_TransType int)
RETURNS VARCHAR(200) AS
BEGIN
Declare @v_LowerStr VARCHAR(200) -- 小写金额
Declare @v_UpperPart VARCHAR(200)
Declare @v_UpperStr VARCHAR(200) -- 大写金额
Declare @i_I intset @v_LowerStr = LTRIM(RTRIM(ROUND(@n_LowerMoney,2))) --四舍五入为指定的精度并删除数据左右空格
set @i_I = 1
set @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
set @v_UpperStr = @v_UpperPart + @v_UpperStr
set @i_I = @i_I + 1
endif ( 0 = @v_TransType)
begin
set @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
set @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
set @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')
set @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')
set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')
set @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')
set @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')
set @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')
set @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')
set @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
end-- 对壹元以下的金额的处理
if ( '元' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif ( '零' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif ( '角' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif ( '分' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
endif ('整' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = '零元整'
end
return @v_UpperStr
END
GO
------------------------------
执行:
select dbo.L2U(1200310.321,0)壹佰贰拾万零叁佰壹拾元叁角贰分
function SmallToBigStr(Small:DouBle):string; // 小写数字 TO 大写汉字
var SmallMonth,BigMonth:String;
wei1,QianWei1:String;
wei,QianWei,dianweizhi,qian:integer;
T:boolean;
begin
T:=False;
if Small<0 then
begin
T:=True;
Small:=Small*-1;
end;
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;
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;
if T then Result := '余款大写:人民币(负)'+BigMonth
else Result := '余款大写:人民币'+BigMonth;
end;