在最近的项目中,需要将水晶报表里的金额总计,转换为英文大写。实现的效果如下图所示:

代码:(复制下面的代码直接在报表新建一个Formula就可以用了。Crystal Report 版本:8.5)

numbervar Amount:=Sum ({@Amount});//金额转英文大写,Crystal语法 local stringVar array smallNumbers := ["ZERO",  "ONE",  "TWO",  "THREE",  "FOUR",  "FIVE",  "SIX",  "SEVEN",  "EIGHT", "NINE",  "TEN",  "ELEVEN",  "TWELVE",  "THIRTEEN",  "FOURTEEN",  "FIFTEEN", "SIXTEEN",  "SEVENTEEN",  "EIGHTEEN",  "NINETEEN"]; local stringVar array tensNumbers := ["",  "",  "TWENTY",  "THIRTY",  "FORTY",  "FIFTY",  "SIXTY",  "SEVENTY",  "EIGHTY", "NINETY"]; local stringVar array scaleNumers := ["", "THOUSAND", "MILLION", "BILLION" ]; local stringVar End := "ONLY"; //小数点前 local numberVar decimals1; //小数点后 local numberVar decimals2; //纯小数 If Amount <1 then decimals1 := 0 else decimals1 := Cdbl(Left(Replace(cstr(Amount*100,0),",",""),length(Replace(cstr(Amount*100,0),",",""))-2)); local numberVar decimals2 := Cdbl(Right(Replace(cstr(Amount*100,0),",",""),2)); //初始化显示英文为ZERO stringVar combined1 := smallNumbers[1]; stringVar combined2 := smallNumbers[1]; if decimals1 <> 0 then ( numberVar i := 1; numberVar array digitGroups := [0,0,0,0]; //将金额拆分成4段,每段放3位数,即:XXX,XXX,XXX,XXX。最大仅支持到Billion, for i := 1  to 4 step 1  do ( digitGroups[i] := decimals1 mod 1000; decimals1 := Int(decimals1 / 1000); ); stringVar array groupText1 := ["","","",""]; //处理每段的金额转英文,百位+十位+个位 for i:=1 to 4 step 1 do ( numberVar hundreds := Int(digitGroups[i] / 100); numberVar tensUnits := digitGroups[i] mod 100; //百位 if hundreds <> 0 then  ( groupText1[i] := groupText1[i] + smallNumbers[hundreds+1] + " HUNDRED"; if tensUnits <> 0 then groupText1[i] := groupText1[i] + " AND "; ); //十位和个位 numberVar tens := Int(tensUnits / 10); numberVar units := tensUnits mod 10; if tens >= 2 then //十位大于等于20 ( groupText1[i] := groupText1[i] + tensNumbers[tens+1]; if units <> 0 then groupText1[i] := groupText1[i] + " " + smallNumbers[units+1]; ) else if tensUnits <> 0 then //十位和个位,小于20的情况 groupText1[i] := groupText1[i] + smallNumbers[tensUnits +1] ); //金额的个十百位赋值到combined combined1 := groupText1[1]; //将金额排除个十百位以外,余下的3段英文数字,加上千位分隔符英文单词,Thousand/Million/Billion for i:=2 to 4 step 1 do ( if digitGroups[i] <> 0 then ( stringVar prefix := groupText1[i] + " " + scaleNumers[i];  //A:组合Thousand 和Billion if Length(combined1) <> 0 then //B:如果金额的百位+十位+个位非0,则在后面加上空格 prefix := prefix+ " "; combined1 := prefix + combined1; //再连接 A+B ); ); ); if decimals2 <> 0 then ( //十位和个位 numberVar tens := Int(decimals2 / 10); numberVar units := decimals2 mod 10; if decimals2 >= 20 then //20~99 ( combined2 := "AND CENTS " + tensNumbers[tens+1]; if units <> 0 then combined2 := combined2 + " " + smallNumbers[units+1]; ) else if decimals2 > 1 then //19到2之间 combined2 := "AND CENTS " + smallNumbers[decimals2 +1] else combined2 := "AND CENT " + smallNumbers[decimals2 +1] ); if combined1 <> "ZERO" Then if combined2 <> "ZERO" Then combined1 +" "+ combined2 + " " + End else combined1+ " " + End else if combined2 <> "ZERO" Then combined2 + " " + End else "ZERO";

 

转载于:https://www.cnblogs.com/szny/archive/2010/01/28/1658152.html

crystal report中英文数字转大写相关推荐

  1. PHP基于字典的中英文数字混合分词算法RMM简易实现

    <?phpclass Seg {//字典private $dict = [];//加载字典function set_dict($vDict){//词典大写,方便比对foreach ($vDict ...

  2. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词

    基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...

  3. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词

    基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...

  4. 我的crystal report for asp.net測試通過了

        昨天晚上﹐測試在vs.net2003中用推的模式呼叫crystal report﹐成功﹐今天一大早﹐ 又開始繼續測試其轉檔與參數傳遞的功能﹐花了2個小時﹐都已OK,綜合這几天的測試﹐    我 ...

  5. Lotus Notes 和 Crystal Report 的整合應用

    一.寫在前面 跟據 Seagate 網站上的說明,要將 Crystal Report 跟 Lotus Notes 整合, 必須要安裝 Crystal Report 7.x以上版本及 Lotus Dom ...

  6. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...

    在Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据一)中,解释了如何把Crystal Report整合到Sharepoint ...

  7. 水晶报表的统计功能-Crystal Report Sub total Per Page

    先大概表述下我对水晶报表的理解: 大体上Crystal Report 可以理解为3部分: 第一部分:数据引擎 Crystal Report 集成了各种数据访问接口,可以方便的从数据仓库中提取数据,并把 ...

  8. Crystal Report 2008

    郁闷的Crystal Report 2008,下午逛了一圈sap网站,Crystal给Sap收购后就没怎么上过他们的网站,像迷宫一下逛了半天才找到下载升级包的地址,备用,也许你看到的时候已经失效了 h ...

  9. 搭建基于飞桨的OCR工具库,总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别的PaddleOCR

    介绍 基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别.竖排文本识别.长文本识别.同时支持多种文本检测.文本识别的训练算法. 相关链接 PaddleOCR ...

最新文章

  1. Python培训:try-except语句与else子句联合使用处理可能出现的程序异常
  2. 对IP首部检验和的理解
  3. 003_Controller和RequestMapping注解
  4. baidu+app+per+android,百度移动统计|移动应用APP统计|android统计分析|iOS统计分析
  5. 家庭组计算机无法,【求助】Windows无法从该家庭组中删除你的计算机
  6. Postman用法简介-Http请求模拟工具
  7. 安装gunicorn
  8. 摄影软件“留拍”开发现状与过程遇到的困难
  9. Google Native Client介紹
  10. WindowsBuilder控件中文编码问题
  11. 给大家推荐一个前端非常好用的量图软件(只能量psd的哦)像素大厨 PxCook 像素大厨使用方法
  12. Navicat12.0 激活
  13. Pointer Network指针网络
  14. 实现了一个简单的以图搜图功能(带代码)
  15. 和面试官面对面—常见接口测试面试题汇总(附参考答案)
  16. 注册AWS账号创建EC2免费套餐详细教程
  17. 2021年上半年最可靠的计算机领域投稿资源---着急毕业的同学必看
  18. python读取短信验证码_我用Python给你发了个短信验证码,你也来试试
  19. windows10使用Debug
  20. 【软件工程实践】Hive研究-Blog10

热门文章

  1. 摩托罗拉Atrix预言了智能手机的现在和未来
  2. iconfont半月坑
  3. 详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
  4. mysql8 s开头函数学习
  5. 电脑上用,电脑上怎么使用
  6. JavaScript笔记之二--- 崔西凡day03
  7. 公司年会脱口秀《家》
  8. Shiro原理及源码分析
  9. Conflux「 .web3 用户名 」2月28日正式上线!
  10. java中的进程和线程区别