免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1197 | 回复: 0
打印 上一主题 下一主题

呃,还是发在这里吧 [复制链接]

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-10 08:50 |只看该作者 |倒序浏览
本帖最后由 A.com 于 2013-11-10 09:27 编辑

票据需要打印大写金额,网上找了好几个,逻辑一塌糊涂,测试结果也不怎么理想。干脆自己写了。
支持负数!t-sql测试过,mysql自己改吧

  1. /*
  2. 金额阿拉伯数字转换为中文的自定义函数
  3. */
  4. create function fatoc (@amount decimal(18, 2)) returns nvarchar(36) as
  5. begin
  6. declare @digital                nvarchar(10) = '零壹贰叁肆伍陆柒捌玖'
  7. declare @position                nvarchar(18) = '万仟佰拾亿仟佰拾万仟佰拾元角分'
  8. declare @posstr                        varchar(1)                --从金额中取出一位的值
  9. declare @inputstr                nvarchar(18)
  10. declare @i                                int                                --循环变量
  11. declare @l                                int                                --金额乘以100后的字符串长度
  12. declare @chdig                        nvarchar(1)                --数字大写
  13. declare @chpos                        nvarchar(1)                --数字位大写
  14. declare @zero                        int                                --连续零计数器
  15. declare @returnvalue        nvarchar(36) = ''

  16. set @inputstr = replace(@amount, '.', '')
  17. set @l = len(@inputstr)
  18. set @position = right(@position, @l)
  19. if left(@inputstr, 1) = '-'
  20.   set @position = '负' + right(@position, @l - 1)

  21. set @i = 1
  22. while @i <= @l
  23.   begin
  24.   set @posstr = substring(@inputstr, @i, 1)                                                --取x位数字
  25.   set @chdig = substring(@digital, cast(@posstr as int) + 1, 1)        --x位数字转大写
  26.   set @chpos = substring(@position, @i, 1)                                                --x位对应位大写
  27.   if @posstr != '0'
  28.     begin
  29.     --补回除亿、万、元位外的零
  30.     if (@zero > 0) and (@i != @l - 9) and (@i != @l - 5) and (@i != @l - 1)
  31.       set @returnvalue = @returnvalue + '零'
  32.     set @zero = 0
  33.     end
  34.   if @posstr = '-'
  35.     set @chdig = ''
  36.   if @posstr = '0'
  37.     begin
  38.     set @chdig = ''        --去大写零
  39.     --去零对应位大写,保留亿、万、元位
  40.     if (@i != @l - 10) and (@i != @l - 6) and (@i != @l - 2)
  41.       set @chpos = ''
  42.     --最后零取整
  43.     if @i = @l
  44.       set @chpos = '整'
  45.     set @zero = @zero + 1
  46.     end
  47.   set @returnvalue = @returnvalue + @chdig + @chpos
  48.   set @i = @i + 1
  49.   end
  50. set @returnvalue = replace(@returnvalue, '亿万', '亿')
  51. return(@returnvalue)
  52. end

  53. go
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP