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

By admin at 2018-12-06 • 0人收藏 • 218人看过

整理自: 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

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...