📄 decimaltoenglish.txt
字号:
/*{------------------数字转换为英文函数A-------------------------------}
参数介绍:Num(Decimal类型)
Cntype(integer类型)
0--通用格式(最高数位Million百万)
1--美式格式(最高数位Trillion万亿)
2--英式格式(最高数位Trillion百亿亿)
*/
string int_str,dec_str//整数部分和小数部分
string Numstr//用于处理的数字字符串
string n[0 to 90]//数位名称定义
string Result//返回结果
integer digit
string Minus //数字正负性
//初始化
if (Cntype<>0) and (CnType<>1) and (CnType<>2) then
messageBox('参数错误','参数错误:选择转换类型参数值错误!',StopSign!)
return('')
end if
result=''//初始化结果字符
//初始化关键字
n[0]='Zero';n[6]='Six';n[12]='Twelve';n[18]='Eighteen';
n[1]='One';n[7]='Seven';n[13]='Thirteen';n[19]='Nineteen';
n[2]='Two';n[8]='Eight';n[14]='Fourteen';n[20]='Twenty';
n[3]='Three';n[9]='Nine';n[15]='Fifteen';
n[4]='Four';n[10]='Ten';n[16]='Sixteen';
n[5]='Five';n[11]='Eleven';n[17]='Seventeen';
n[30]='Thirty';n[50]='Fifty';n[70]='Seventy';n[90]='Ninety';
n[40]='Forty';n[60]='Sixty';n[80]='Eighty';
Minus=''
if num<0 then
Num= - Num
Minus='Minus '
end if//得到正负性
//初始化完毕
numstr=string(num)//得到数字串
//分别得到整数部分和小数部分
if pos(Numstr,'.')>0 then
int_str=mid(numstr,1,pos(Numstr,'.')-1)
dec_str=mid(numstr,pos(Numstr,'.')+1,len(numstr)-pos(Numstr,'.'))
//消除小数后面多余的0
do while mid(dec_str,len(dec_str),1)='0'
dec_str=mid(dec_str,1,len(dec_str) -1)
loop
if dec(dec_str)=0 then//如果小数为0
dec_str=''
end if
else
int_str=numstr
dec_str=''
end if
//*******************************开始分析整数部分*******************************
//*********分析只有一~三位数的情况
if len(int_str)<=3 then
if int_str='0' then//等于0
result='zero'
else
if dec(int_str)<=20 then//小于等于20
result=n[dec(int_str)]//直接读取名称
else
if dec(int_str)<100 then//小于100
if mid(int_str,2,1)='0' then//整十
result=n[dec(int_str)]
else
result=n[dec(mid(int_str,1,1)+'0')]+' '+n[dec(mid(int_str,2,1))]//组合几十几
end if
end if
end if
if dec(int_str)>=100 then//大于100
if (mid(int_str,2,1)='0') and (mid(int_str,3,1)='0') then
result=n[dec(mid(int_str,1,1))]+' Hundred'
else
result=n[dec(mid(int_str,1,1))]+' Hundred and '+DecimalToEnglish(dec(mid(int_str,2,1)+mid(int_str,3,1)),0)
end if
end if
end if
end if
//************分析有四~六位数的情况
if (len(int_str)>=4) and (len(int_str)<=6) then
if dec(mid(int_str,len(int_str)-2,3))=0 then//后面全是0
result=decimalToEnglish(dec(mid(int_str,1,len(int_str)-3)),0)+' Thousand'
else
if mid(int_str,len(int_str)-2,1)='0' then//百位为0,加and
result=decimalToEnglish(dec(mid(int_str,1,len(int_str)-3)),0)+' Thousand and '+decimalToEnglish(dec(mid(int_str,len(int_str)-2,3)),0)
else
if mid(int_str,len(int_str)-1,2)='00' then//是整百,加and
result=decimalToEnglish(dec(mid(int_str,1,len(int_str)-3)),0)+' Thousand and '+decimalToEnglish(dec(mid(int_str,len(int_str)-2,3)),0)
else
result=decimalToEnglish(dec(mid(int_str,1,len(int_str)-3)),0)+' Thousand '+decimalToEnglish(dec(mid(int_str,len(int_str)-2,3)),0)
end if
end if
end if
end if
//************分析七~九位数的情况
if (len(int_str)>=7) and ((len(int_str)<=9)) then
if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million'
else
/*if pos('and',LowerCase(decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)))))=0 then
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)))
else*/
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million,'+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)
end if
end if
//************分析十~十二位数的情况
if (len(int_str)>=10) and ((len(int_str)<=12)) then
choose case Cntype
case 0//普通格式
if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million'
else
/*if pos('and',LowerCase(decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)))=0 then
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)))
else*/
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million,'+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)
end if
case 1//美式格式
if dec(mid(int_str,len(int_str)-8,9))=0 then//如果后面9位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-9)),0)+' Billion'
else
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-9)),0)+' Billion,'+decimaltoenglish(dec(mid(int_str,len(int_str)-8,9)),1)
end if
case 2//英式格式
if dec(mid(int_str,len(int_str)-8,9))=0 then//如果后面9位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-9)),0)+' Milliard'
else
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-9)),0)+' Milliard,'+decimaltoenglish(dec(mid(int_str,len(int_str)-8,9)),2)
end if
end choose
end if
//***********分析十三~十八位数的情况
if (len(int_str)>=13) and ((len(int_str)<=18)) then
choose case Cntype
case 0//普通格式
if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million'
else
/*if pos('and',LowerCase(decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)))=0 then
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)))
else*/
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million,'+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)
end if
case 1//美式格式
if dec(mid(int_str,len(int_str)-11,12))=0 then//如果后面十二位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-12)),0)+' Trillion'
else
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-12)),0)+' Trillion,'+decimaltoenglish(dec(mid(int_str,len(int_str)-11,12)),1)
end if
case 2//英式格式
if dec(mid(int_str,len(int_str)-11,12))=0 then//如果后面十二位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-12)),0)+' Billion'
else
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-12)),0)+' Billion,'+decimaltoenglish(dec(mid(int_str,len(int_str)-11,12)),2)
end if
end choose
end if
//**********分析十八位数以上的情况
if len(int_str)>18 then
choose case Cntype
case 0//普通格式
if dec(mid(int_str,len(int_str)-5,6))=0 then//如果后面6位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million'
else
/*if pos('and',LowerCase(decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)))=0 then
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million and '+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)))
else*/
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-6)),0)+' Million,'+decimaltoEnglish(dec(mid(int_str,len(int_str)-5,6)),0)
end if
case 1//美式格式
if dec(mid(int_str,len(int_str)-11,12))=0 then//如果后面十二位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-12)),1)+' Trillion'
else
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-12)),1)+' Trillion,'+decimaltoenglish(dec(mid(int_str,len(int_str)-11,12)),1)
end if
case 2//英式格式
if dec(mid(int_str,len(int_str)-17,18))=0 then//如果后面十八位全是0
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-18)),2)+' Trillion'
else
result=decimaltoenglish(dec(mid(int_str,1,len(int_str)-18)),2)+' Trillion,'+decimaltoenglish(dec(mid(int_str,len(int_str)-17,18)),2)
end if
end choose
end if
//**************整数分析完毕*********************
//*********************分析小数**********************
if dec_str<>'' then
if result='zero' then
result='point'
else
result=result+' point'
end if
for digit=1 to len(dec_str)
if mid(dec_str,digit,1)='0' then
result=result+' zero '
else
result=result+' '+n[dec(mid(dec_str,digit,1))]
end if
next
end if
result=Minus+result//成功
return(result)
//转换结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -