(转)人民币转大写函数及使用示例

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);

image.png

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...