(转)人民币转大写函数及使用示例
By
admin
at 2018-12-06 • 0人收藏 • 1353人看过
整理自: aar群 感谢 夏天雨 提供
import console; toCNY=function(num){ var cn = { ["0"] = "零"; ["1"] = "壹"; ["2"] = "贰"; ["3"] = "叁"; ["4"] = "肆"; ["5"] = "伍"; ["6"] = "陆"; ["7"] = "柒"; ["8"] = "捌"; ["9"] = "玖" } var units = { "元";"拾";"佰";"仟";"万";"拾";"佰";"仟";"亿";"拾";"佰";"仟";"万";"拾";"佰";"仟"}; var cny ={};//直接用字符串的话遇到中文处理起来挺麻烦,所以用table,注意默认插入的时候在开头,所以是反向存储的。 var ns;//数值的字符串 var isFu=false;//是否为负数 try{ ns=..string.format("%.4f",num ) } catch(e){ return "数值格式错误,或浮点数值过大。"; } var xiaoshu=..string.right(ns,4); if(xiaoshu[[3]]!="0"||xiaoshu[[4]]!="0") return "小数位数错误。"; var zhengshu=..string.left(ns,#ns-5); if(#zhengshu>15) return "数值太大。";//16位整数的时候也能处理,但是已经不精确了。 if(zhengshu[[1]]=="-"){ isFu=true; zhengshu=..string.right(zhengshu,#zhengshu-1); } var u="";//单位 for(i=1;#zhengshu;1){ u=units[#zhengshu+1-i]; if(u=="元"||u=="万"||u=="亿"){ if(zhengshu[[i]]=="0"){//除了0.12这样的小数外,其他的不可能是开头为0的数字,如果上一个是零就把零去掉加单位 if(#cny==0) continue ;//0.00这样的小数,不予处理整数部分 if(cny[1]=="零") ..table.remove(cny,1);..table.insert(cny,u);//300000为三十万而不是三十零万 } else {//如果是正常的数字 ..table.insert(cny,cn[zhengshu[[i]]]);..table.insert(cny,u);//正常续写 } }else {//非分段单位,不可能是开头为0 if(zhengshu[[i]]=="0"){ if(cny[1]=="零") {//如果前面已经是零了就不重复写零 table.insert默认是插在第一位,所以第一位是大写字符数组的最后一个字符 continue ; } else { ..table.insert(cny,"零");//写零不加单位 } }else { //正常续写,数字加单位 ..table.insert(cny,cn[zhengshu[[i]]]); ..table.insert(cny,u); } } } if(xiaoshu[[1]]=="0"&&xiaoshu[[2]]=="0"){//后两位是零的情况 if(#cny==0){//0.00 return "零元"; }else { ..table.insert(cny,"整"); } }else { if(xiaoshu[[1]]=="0"){ ..table.insert(cny,"零"); }else { ..table.insert(cny,cn[xiaoshu[[1]]]); ..table.insert(cny,"角"); } if(xiaoshu[[2]]=="0"){ ..table.insert(cny,"整"); }else { if(cny[1]=="零"&&cny[2]!="元") ..table.remove(cny,1);//这一句去掉0.01类型中多余的零 ..table.insert(cny,cn[xiaoshu[[2]]]); ..table.insert(cny,"分"); } } ..table.reverse(cny)//翻转一下 if(isFu) ..table.insert(cny,"负"); return ..string.join(cny); } console.log("-1.01:" ,toCNY(-1.01) ); console.log("1000:" ,toCNY(1000) ); console.log("300050:" ,toCNY(300050) ); console.log("-0.05:" ,toCNY(-0.05) ); console.log("20051300025:" ,toCNY(20051300025) ); console.log("-20051300025.01:" ,toCNY(-20051300025.01) ); console.log("-20051300025.50:" ,toCNY(-20051300025.50) ); console.pause(true);
登录后方可回帖