(转)人民币转大写函数及使用示例
By
admin
at 2018-12-06 • 0人收藏 • 1417人看过
整理自: 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);
登录后方可回帖