在致远表单设计中,为实现将阿拉伯数字转为大写汉字,通过参考大神的算法和致远表单设计方法,将算法以groovy语言实现出来,下面作以分享:
算法思路:先将数字逐字转换为汉字数字和汉字单位,再将挨着个位、万位、亿位前的所有零和单位都剔除掉;未挨着个位、万位、亿位前的连续零和单位仅保留最低一位为零,其他均剔除。最后还发现,如果亿和万之间数字均为零,则需删除万位,比如一亿万要把万字删掉才能得出正确结果一亿。
操作步骤:
①表单中分别添加一个数字控件和一个文本控件,主要实现数字控件中的数字以大写汉字的格式自动显示在文本控件中;
②选中文本控件,点击右侧控件属性的计算公式,点击函数自定义,新建函数,参数设置选择数字控件的数据域名,代码框中填写groovy代码,保存即可。
代码内容:
//阿拉伯数字转大写汉字,最高位数一仟万亿,groovy语言
String abs=param[0]; //读取阿拉伯数字
ch_number=[1:"壹",2:"贰",3:"叁",4:"肆",5:"伍",6:"陆",7:"柒",8:"捌",9:"玖",0:"零"];
ch_unit =["","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"];
l=abs.length()-1;
ch =[]; //汉字数组
i=0
def absz=abs as String[]; //转换阿拉伯数字数组
//数字逐位转换为对应的汉字
for (i in absz){
j =i as int;
ch.add(ch_number[j]);
ch.add(ch_unit[l]);
l-=1;
}
//算法开始:思路-挨着空、万、亿前的所有的零和单位均剔除;未挨着空、万、亿前的连续零和单位仅保持最低一位为零,其他均剔除
//把所有0及0后除空、万、亿以外的单位替换为x
k=ch.size()-1;
for(k;k>0;k=k-2){
if(ch[k-1]=="零")ch[k-1]="x";
if(ch[k-1]=="x" && ch[k]!="" && ch[k]!="万" && ch[k] !="亿")ch[k]="x";
}
//把挨着空、万、亿前所有的x替换为y
k = ch.size()- 1;
for(k;k>0;k=k-1){
if( ((ch[k]=="" || ch[k]=="万" || ch[k]=="亿") && ch[k-1] =="x") || (ch[k]=="y" && ch[k-1]=="x"))ch[k-1]="y";
}
//把连续的x的最低一位x替换为零
k=ch.size()-2;
for(k;k>0;k=k-1){
if(ch[k]=="x" && ch[k+1]!="零" && ch[k+1]!="x")ch[k]="零";
}
//算法结束
//如果亿和万之间数字均为零,则需删除万的单位,比如一亿万要把万字删掉
k= ch.size();
if(k>=18 && ch[k-16]=="y"&& ch[k-14]=="y" && ch[k-12] =="y")ch[k-9] ="x";
String dxh =""; //定义大写汉字字符串
i=0;
//将汉字数组转换为字符串写入dxh字符串中
for (i; i<ch.size();i++){
if(ch[i]!="x" && ch[i]!="y")dxh=dxh+ch.get(i);
}
return dxh;