[水晶报表]金额转英文大写
2015-08-17 14:31
330 查看
源文转载:http://bbs.csdn.net/topics/300021579 Function (numbervar 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 := "CENTS " + tensNumbers[tens+1]; if units <> 0 then combined2 := combined2 + " " + smallNumbers[units+1]; ) else if decimals2 > 1 then //19到2之间 combined2 := "CENTS " + smallNumbers[decimals2 +1] else combined2 := "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";
相关文章推荐
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- HDOJ 2046 骨牌铺方格 【递推】
- HDOJ 2046 骨牌铺方格 【递推】
- 串口的工作原理
- 使用jQuery+css实现选项卡切换功能
- 【动态规划】POJ2385-Apple Catching
- jquery动感漂浮导航菜单代码分享
- powerdesigner12.0版破解方法
- Ahui Writes Word
- Sensor HAL框架分析之一
- STM32固件库命名规则
- [Solution] ASP.NET Identity(2) 空的项目使用
- 判断URL中的中文参数是GB2312还是Utf-8编码
- 在950130000客服中心,细节即是修养
- Ahui Writes Word
- HeadFirst 设计模式 6命令模式 (遥控器)
- MyEclipse设置编码
- ios下mach_absolute_time获取精准时间
- git 分支学习
- CF_476C_DreamoonAndSums