博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数字转中文,大写,金额
阅读量:6212 次
发布时间:2019-06-21

本文共 6062 字,大约阅读时间需要 20 分钟。

      最近,又发现了另外一种数字转中文,大写,金额的方法,觉得会比之前找到的跟合适一点npm安装包地址:https://npm.taobao.org/package/nzh(在这里,会有更加详细的使用介绍。而我就只是测了其中一种。。。。。。)

简介:Nzh适用于开发过程中需要将数字转换为中文的场景 以字符串的方式转换,解决超大数及浮点数等问题,请自行对原数据进行四舍五入等操作.

1.首先在项目中安装依赖包:npm install nzh

附上nzh.js的源代码:

 

/* 待优化点1.小数点拆分计算 12.代码简洁化 13.亿亿转万万亿 14.转金额规则规范化 参考 http://baike.baidu.com/link?url=lqGf7GrSnMPYvmrb4qMP_yS9k7aATfDidjsAC3eHv7Sxm76_hbamjuLaZH_g74n0Mr-a9CwIy6ekOIEK3Lt-G_待补充点1.中文数字转阿拉伯数字 12.港台地区支持 13.自定义转换 14.科学记数法字符串支持 */(function (name, factory) {    if (typeof define === 'function' && (define.amd || define.cmd)) {        define([], factory);    } else if (typeof window !== "undefined" || typeof self !== "undefined") {        var global = typeof window !== "undefined" ? window : self;        global[name] = factory();    } else {        throw new Error("加载 " + name + " 模块失败!,请检查您的环境!")    }}('Nzh', function () {    var langs = {        s:{            ch: '零一二三四五六七八九'            ,ch_u: '个十百千万亿'            ,other: '负点'        },        b:{            ch: '零壹贰叁肆伍陆柒捌玖'            ,ch_u: '个拾佰仟万亿'            ,other: '负点'            ,m_t: '人民币'            ,m_z: '整'            ,m_u: '元角分'        },        s_hk:{            ch: '零一二三四五六七八九'            ,ch_u: '個十百千萬億'            ,other: '負點'         },        b_hk:{            ch: '零壹貳參肆伍陸柒捌玖'            ,ch_u: '個拾佰仟萬億'            ,other: '負點'             ,m_t: '$'            ,m_z: '整'            ,m_u: '圓角分'        }    }    var regs = {        number : /^([+-])?0*(\d+)(\.(\d+))?$/        ,number_e: /^([+-])?0*(\d+)(\.(\d+))?(e([+-])?(\d+))?$/  //科学计数法,下次实现        ,is10to19 : /^1\d$/    }    function unshift0(arr,n){        if(n == null) n=1;         for(;n--;) arr.unshift(0);    }    function centerarr(barr,sarr){        for(var i=0;i
2){ var r = [].slice.call(arguments,2); r.unshift(barr); centerarr.apply(null,r); } return barr; } function zero_comm(str,char_0,type){ str = str.split(""); if(!type || type=="$"){ for(var i=str.length;i--;){ if(str[i] == char_0){ str[i]="" }else{ break; } } } if(!type || type=="nto1"){ var mark = false; for(var i=0;i
>0 ,y = _int.length%4 ,es = y || 4; while (y==0 || !ch_u.charAt(3+d)){ y+=4; d--; } int = toCL.call(this,_int.substr(0,y),m,ww,1) + ch_u.charAt(3+d) + (~(_int.substr(y-1,2).indexOf("0"))?n0:'') + toCL.call(this,_int.substr(y),false,ww,1) } //console.log(int); //int = int.replace(reg1,n0).replace(reg,''); int = zero_comm(int,n0); // int = zero_comm(int,n0,'$'); if(!dg && ww && ch_u.length>5){ var dw_w = ch_u.charAt(4), dw_y = ch_u.charAt(5); var lasty = int.lastIndexOf(dw_y); if(~lasty){ int = int.substring(0,lasty).replace(new RegExp(dw_y,'g'),dw_w+dw_w) + int.substring(lasty); } } return minus + int + dicimal; } function unCL(cnnumb){ var result = cnnumb.split(this.other.charAt(1)); var _int = result[0].replace(this.other.charAt(0),"") ,_decimal = result[1] ,_minus = !!~result[0].indexOf(this.other.charAt(0)); var dw_w = this.ch_u.charAt(4), dw_y = this.ch_u.charAt(5); _int = _int.replace(new RegExp(dw_w+"{2}","g"),dw_y); var cnarr = _int.split(''); var rnum=0,num=0,_num=0,dw=0,maxdw=0; var rnum_a=[],num_a=[],_num_a=[]; function wei(u){ return u >= 5 ? (u-4)*4+4 : u; } for(var i=0;i
u){
//正常情况 // num += _num * (u == 5 ? Math.pow(10,8): Math.pow(10,u)); // _num = 0; unshift0(_num_a,wei(u)); centerarr(num_a,_num_a); }else if(u>=maxdw){
//后跟大单位 // if(i==0) _num = 1; // rnum += num + _num; // rnum *= u == 5 ? Math.pow(10,8): Math.pow(10,u); // num = 0; // _num = 0; maxdw = u; if(i==0) _num_a=[1]; centerarr(rnum_a,num_a,_num_a); unshift0(rnum_a,wei(u)); }else{ //num = (num + _num) * (u == 5 ? Math.pow(10,8): Math.pow(10,u)); //_num = 0; dw = u; centerarr(num_a,_num_a); unshift0(num_a,wei(u)); } }else{ //return cnnumb; } } centerarr(rnum_a,num_a,_num_a).reverse(); var decimal = 0; if(_decimal){ rnum_a.push('.') decimal = '0.' for(var i=0; i<_decimal.length; i++){ decimal+=this.ch.indexOf(_decimal.charAt(i)); rnum_a.push(this.ch.indexOf(_decimal.charAt(i))); } decimal = +decimal; } rnum = (rnum + num + _num + decimal)*(_minus?-1:1); //console.log(rnum_a.join('')); //console.log(rnum); return rnum_a.join(''); } function toMoney(num,ww){ //lang = (typeof lang == 'object' && lang.m_u) ? lang : langs.b; var result = regs.number.exec(num.toString()); if(!result && typeof num == "number"){ //return '超出出范围!' return num; }else if(!result){ //return '参数错误!' return num; } var _num = result.slice(1,3).join('') ,_decimal = result[4]; var xs_str = _decimal ? '' : this.m_z; if(_decimal){ for(var i=0; i
View Code

 

 

 

2.其实这是自己在做小测试的时候,使用nzh的,在安装完依赖包之后,自己将nzh.js文件直接引入页面中,

    
Title

输入金额

 

效果就是:

3.自己觉得该方法会比之前的两种方法更好一点,不过还是要看具体情况,选择使用哪一种。

 

转载地址:http://mndja.baihongyu.com/

你可能感兴趣的文章
SharePoint 2010 文档管理之过期归档工具
查看>>
第11章代码详解
查看>>
树莓派配置小记1:系统篇
查看>>
第三次作业——吴有恒
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)
查看>>
Ubuntu16下Hadoop安装
查看>>
axios 拦截 , 页面跳转, token 验证
查看>>
Last Position of Target
查看>>
和我一起来学iOS(一)ObjectC的语法
查看>>
php_bu
查看>>
一轮项目冲刺3
查看>>
javaEE之------ApectJ的切面技术===标签
查看>>
js 获取昨天,今天和明天的年月日格式
查看>>
中枢理论3
查看>>
妹子图-mysql
查看>>
谈谈地理坐标和投影坐标
查看>>
[原创] Ubuntu Linux 安装Eclipse
查看>>
hdu1709
查看>>
【CSS】div的背景图完整图片覆盖
查看>>
一、微服务(Microservices)【翻译】
查看>>