2010年12月20日

一个取出数字某一位转化为大写的函数

 利用报表工具打印发票的时候常常遇到发票格式已经固定好,如 ×万×千×百×拾×元×角×分(其中×是要填写数字大写的地方)。

多年前写了个函数来解决这个问题,说明如下

[L2U](@total decimal(18,2),@rindex int)
其中@total要转化的数字,@rindex是需要取得大写数字相对小数点的位数,
小数点左边是正数,右边是负数。

结果如下:

select dbo.L2U(120.5,1)

select dbo.L2U(120.5,2)

select dbo.L2U(120.5,3)

select dbo.L2U(120.5,-1)

select dbo.L2U(120.5,-2)

select dbo.L2U(120.5,0)
.

左边没有数字的第一位显示人民币符号
select dbo.L2U(120.5,4)

其他位无数字返回空字符。

 

 

取出数字中某一位转化为大写
 1 Create Function [dbo].[L2U](@total decimal(18,2),@rindex int)
 2     returns nvarchar(1)
 3 as
 4 
 5 begin
 6 
 7 declare @i int
 8 declare @tmp nvarchar(20)
 9 declare @n nvarchar(1)
10 
11 
12 
13 if(@rindex =0)
14     select @n='.'
15 else
16 begin    
17 
18 select @i=1
19 select @tmp=''
20 while(@i<=len(cast(@total as varchar(100))))
21 begin
22     select @tmp = @tmp + case substring(cast(@total as varchar(100)),@i,1
23                         when '1' then ''
24                         when '2' then ''
25                         when '3' then ''
26                         when '4' then ''
27                         when '5' then ''
28                         when '6' then ''
29                         when '7' then ''
30                         when '8' then ''
31                         when '9' then ''
32                         when '0' then ''
33                         when '.' then '.'
34                         else '' end
35     select     @i = @i + 1                
36 end
37 
38 select @tmp = '' + @tmp
39  
40 if(@rindex>0)
41     select @tmp=substring(cast(@tmp as varchar(100)),1,patindex('%.%',cast(@tmp as varchar(100)))-1)
42 
43 else    
44     select @tmp=substring(cast(@tmp as varchar(100)),patindex('%.%',cast(@tmp as varchar(100)))+1,
45                 len(cast(@tmp as varchar(100)))-patindex('%.%',cast(@tmp as varchar(100))))
46 if(@rindex>0)
47     select @n= substring(@tmp,len(@tmp)-@rindex +1  ,1)
48 else
49     select @n= substring(@tmp,abs(@rindex),1)     
50 end
51 return @n
52 end

 

posted @ 2010-12-20 09:58 rO8eR70.nEt 阅读(85) 评论(0) 编辑

2009年3月10日

StringTemplate研究中的2个问题

近来有点事情需要研究模板引擎StringTemplate,碰到了2个问题;

1:分隔符缺省的是$...$ ,但实际上还可以是<...>,这个选项主要依靠以下方式来实现:

StringTemplateGroup group =  new StringTemplateGroup("sqlstuff""/tmp"typeof(AngleBracketTemplateLexer));

 由于我是直接通过下载的源码来研究的,而源码中包含的文档版本比较旧,其中没有专门的一节说到这个问题,最后偶尔打开网上联机的最新文档Setting the expression delimiters 才看到这一节。选择不同分隔符来对生成代码时避免和sql或者HTML中既有的保留字符冲突就变得极为方便,极大提高了模板文件的可读性。

 2:联机文档C#例子中关于模板文件获取的以下两行代码中

StringTemplateGroup group = new StringTemplateGroup("myGroup""/tmp");
StringTemplate query 
= group.GetInstanceOf("theQuery");

 这其中的路径在常用的微软平台下是不正确的,经过测试后我得到的正确写法如下

StringTemplateGroup group = new StringTemplateGroup("myGroup", (stringnull);
StringTemplate query 
= group.GetInstanceOf("temp/theQuery");
//或者
StringTemplateGroup group 
= new StringTemplateGroup("myGroup",Application.StartupPath + "\\temp");
StringTemplate query 
= group.GetInstanceOf("theQuery");

 

posted @ 2009-03-10 22:26 rO8eR70.nEt 阅读(184) 评论(0) 编辑

  

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:rO8eR70.nEt
园龄:3年6个月
粉丝:0
关注:0

搜索

 
 

常用链接

我的标签

随笔档案

文章分类

最新评论