摘要:数字转换成中文针对财务数据将金额数据转换成大写,在网上有很多例子,总感觉有更简单的方式实现,下面是具体的源码和探究。目前支持持位数,如果更大的数据可进行修正。
数字转换成中文
针对财务数据将金额数据转换成大写,在网上有很多例子,总感觉有更简单的方式实现,下面是具体的源码和探究。如果疑问,或更好的建议欢迎留言,共同学习。
源码</>复制代码
class NumToZh_cn {
numLevel = [
"", "拾", "佰", "仟",
"万", "拾", "佰", "仟",
"亿", "拾", "佰", "仟",
"万", "拾", "佰", "仟",
"亿"
]
currencyUnit = [ "角", "分" ]
numMapToCh = {
"0": "零", "1": "壹", "2": "贰", "3": "叁", "4": "肆",
"5": "伍", "6": "陆", "7": "柒", "8": "捌", "9": "玖"
}
_test( arr, item, index ){
const unit = this.numLevel[ arr.length - index - 1 ];
return item === "0" ?
/(万|亿)/.test(unit) ? unit : "零" : this.numMapToCh[ item ] + unit;
}
_dataIntHandle( arr ){
return arr.map( ( item, index ) => this._test(arr, item, index ) )
.join("")
.replace(/零+/g, "零" )
.replace(/零$/,"") + "元";
}
_dataDeciHandle( arr ){
return arr.map( ( item, index ) =>
item === "0" ? "" : this.numMapToCh[ item ] + this.currencyUnit[ index ]
).join("");
}
convert( numStr ){
numStr = "" + numStr;
if( !/^d+(.d+)?$/.test( numStr.trim() ) ) throw "param is not number";
const [ x="", y="" ] = numStr.split(".");
return this._dataIntHandle( x.split("") ) + this._dataDeciHandle( y.split("") ) + "整";
}
}
const numToZh_cn = new NumToZh_cn();
export {
NumToZh_cn
}
源码说明
通过 num 与中文的映射实现,避免了传统的循环遍历的实现方式。目前支持持17位数,如果更大的数据可进行修正。
</>复制代码
numToZh_cn( 100400 ) // 壹拾万零肆佰零元整
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/104067.html
摘要:过去工作中使用较多,碰到并解决了各种大大小小的问题,总结出这样一篇文章,一方面记录自己踩过的坑,一方面与大家分享,让大家少走弯路,并不断完善之,欢迎大家去上面和提交,不断补充和优化,打造最全面的开发解决方案地址原文地址基础小试牛刀引用文 过去工作中使用PHPExcel较多,碰到并解决了各种大大小小的问题,总结出这样一篇文章,一方面记录自己踩过的坑,一方面与大家分享,让大家少走弯路,并不...
摘要:文章首发地址深入分析中的中文编码问题背景编码问题一直困扰着程序开发人员,尤其是在中更加明显,因为是跨平台的语言,在不同平台的编码之间的切换较多。 文章首发地址:深入分析 Java Web 中的中文编码问题 背景: 编码问题一直困扰着程序开发人员,尤其是在 Java 中更加明显,因为 Java 是跨平台的语言,在不同平台的编码之间的切换较多。接下来将介绍 Java 编码问题出现的根本原...
阅读 815·2021-11-22 13:54
阅读 3206·2021-09-26 10:16
阅读 3642·2021-09-08 09:35
阅读 1655·2019-08-30 15:55
阅读 3503·2019-08-30 15:54
阅读 2155·2019-08-30 10:57
阅读 560·2019-08-29 16:25
阅读 946·2019-08-29 16:15