建筑网站推荐,外贸公司经营范围,阿里云做的网站这么卡的,哪些企业需要网站建设一、编程思路#xff08;本案例只考虑9999万亿以内的数字转换#xff0c;相信这个金额对于人民币来说已经足够庞大了#xff0c;超过此数值的金额不保证转换汉字的准确性#xff0c;且最多精确到小数点后四位#xff09;#xff1a; 1、将示例#xff08;不管是…一、编程思路本案例只考虑9999万亿以内的数字转换相信这个金额对于人民币来说已经足够庞大了超过此数值的金额不保证转换汉字的准确性且最多精确到小数点后四位 1、将示例不管是数字还是字符串统一转换成字符串 A 2、将字符串 A 按照小数点切割成数组 B 3、取数组 B 的整数部分将每一个数字转换成大写汉字并加上单位“個、拾、佰、仟”其中“個”不用显示用空字符替代第5位额外加“萬”这个单位第9位额外加“亿”由此得到完整的整数部分大写汉字字符串 C 4、取数组 B 的小数部分将每一个数字转换成大写汉字并加上单位“角、分、毫、厘”由此得到完整的小数部分大写汉字字符串 D 5、将字符串 C 拼接上一个“圆”再拼接上字符串 D 得到完整的全部数字的大写汉字字符串 F 6、将字符串 F 中的零角、零分、零毫、零厘全部替换成空字符串得到字符串 G 7、将字符串 G 中的零仟、零佰、零拾全部替换成零得到字符串 H 8、将字符串 H 中的2个及以上连续的零全部替换成单个零得到字符串 K 9、还有一些转换或替换详见下方代码示例 10、最终得到我们需要的大写汉字金额
二、编程示例
export const numToChinessCap (numStr) {console.log(numStr numStr);const regex /^\d(\.\d)?$/;if (!regex.test(numStr)) {// console.log(不是有效的整数或小数);return ;}if (numStr.startsWith(.)) {// console.log(不是有效的整数或小数);return ;}if (numStr.endsWith(.)) {// console.log(不是有效的整数或小数);return ;}if (numStr.length 1 numStr.startsWith(0) !numStr.startsWith(0.)) {// console.log(不是有效的整数或小数);return ;}const nums [零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖];const integerUtits [, 拾, 佰, 仟];let parts numStr.split(.);if (parts.length ! 1 parts.length ! 2) {// console.log(不是有效的整数或小数);return ;}let integerPart parts[0];let chineseInteger ;let chineseIntegerArray [];let integerIndex 0;for (let i integerPart.length - 1; i 0; i--) {// 从后往前依次拿到单个数字let singleNum integerPart[i];// 单个数字转换成中文大写汉字let chinessCapNum nums[singleNum];// 该数字后面应该接的单位個、拾、佰、仟(其中‘個’这个单位就省略掉了不需要展示用空字符串替代)let integerUtit integerUtits[integerIndex % 4];// 该数字后面应该额外接的单位萬或者亿第5位开始加萬第9位开始加亿再往后每四位切换使用萬和亿let integerExtUtit ;if (integerIndex ! 0) {if (integerIndex % 8 0) {integerExtUtit 亿;} else if (integerIndex % 4 0) {integerExtUtit 萬;}} chineseIntegerArray[integerIndex] chinessCapNum integerUtit integerExtUtit;integerIndex;}// console.log(chineseIntegerArray , chineseIntegerArray);for (let i chineseIntegerArray.length - 1; i 0; i--) {chineseInteger chineseIntegerArray[i];}// console.log(整数部分转大写汉字后的结果 chineseInteger);let chineseDecimal ;//判断有没有小数如果有则需要对小数部分做处理if (parts.length 2) {const decimalUnits [角, 分, 毫, 厘];let decimalPart parts[1];let valildCount decimalPart.length 4 ? 4 : decimalPart.length;for (let i 0; i valildCount; i) {chineseDecimal nums[decimalPart[i]] decimalUnits[i];}// console.log(小数部分转大写汉字后的结果 chineseDecimal);}let fullChinessCap chineseInteger 圆 chineseDecimal;// console.log(完整大写汉字 fullChinessCap);let replacedChinessCap fullChinessCap.replace(/零[角分毫厘]/g, );// console.log(replacedChinessCap 1 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/零[仟佰拾]/g, 零);// console.log(replacedChinessCap 2 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/零/g, 零);// console.log(replacedChinessCap 3 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/零萬/g, 萬);// console.log(replacedChinessCap 4 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/零亿/g, 亿);// console.log(replacedChinessCap 5 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/萬萬/g, 亿);// console.log(replacedChinessCap 6 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/零圆/g, 圆);// console.log(replacedChinessCap 7 replacedChinessCap);replacedChinessCap replacedChinessCap.replace(/亿萬/g, 亿);// console.log(replacedChinessCap 8 replacedChinessCap);if (replacedChinessCap.startsWith(零圆)) {replacedChinessCap replacedChinessCap.replace(/零圆/, );}if (replacedChinessCap.startsWith(圆)) {replacedChinessCap replacedChinessCap.replace(/圆/, );}if (!replacedChinessCap || replacedChinessCap.length 0) {replacedChinessCap 零圆;}return replacedChinessCap;
}
三、用法示例及运行结果
console.log(numToChinessCap(0.0201));
// 贰分壹厘
console.log(numToChinessCap(123456789.010305));
// 壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖圆壹分叁厘
console.log(numToChinessCap(9099000000000000.220589));
// 玖仟零玖拾玖萬亿圆贰角贰分伍厘
console.log(numToChinessCap(8061560189050150.0008));
// 捌仟零陆拾壹萬伍仟陆佰零壹亿捌仟玖佰零伍萬零壹佰伍拾圆捌厘
console.log(numToChinessCap(100.0005));
// 壹佰圆伍厘
console.log(numToChinessCap(0.0));
// 零圆
console.log(numToChinessCap(0.002));
// 贰毫
console.log(numToChinessCap(20000000.000));
// 贰仟萬圆