Vue JavaScript 小写数字金额转换成大写汉字(附编程思路)
一、编程思路(本案例只考虑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"));
// 贰仟萬圆

相关文章:
Vue JavaScript 小写数字金额转换成大写汉字(附编程思路)
一、编程思路(本案例只考虑9999万亿以内的数字转换,相信这个金额对于人民币来说已经足够庞大了,超过此数值的金额不保证转换汉字的准确性,且最多精确到小数点后四位): 1、将示例(不管是…...
【自动化测试】—— Appium安装配置保姆教程(图文详解)
目录 一. 环境准备 二. JDK安装 1. 下载JDK 2. 安装JDK 3. 配置环境 4. 验证安装 三. Android SDK安装 1. 下载Android SDK 2. 安装Android SDK 3. 安装工具 4. 配置环境 5. 验证安装 四. NodeJS安装 1. 下载NodeJS 2. 安装NodeJS 3. 验证安装 4. 安装淘宝镜像…...
贪心算法详细讲解(沉淀中)
文章目录 1. 什么是贪心算法?(贪婪鼠目寸光)经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法?(贪婪鼠目寸光) 贪心策略&a…...
RabbitMQ中有哪几种交换机类型?
大家好,我是锋哥。今天分享关于【RabbitMQ中有哪几种交换机类型?】面试题。希望对大家有帮助; RabbitMQ中有哪几种交换机类型? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,交换机…...
STM32特殊功能引脚详解文章·STM32特殊功能引脚能当作GPIO使用嘛详解!!!
目录 STM32特殊功能引脚 使用STM32特殊功能引脚函数 禁止搬运,仅供学习,编写不易,感谢理解!!! STM32特殊功能引脚 本篇详解文章仅以STM32F103C8T6芯片来讲解,STM32芯片除了普通的GPIO引脚以外…...
Qt QComboBox的QSS美化
美化效果 QSS设置 /*QComboBox风格设置*/ QComboBox#comboBox_1 { border:2px solid #f3f3f3;/*设置边框线宽*/ background-color:rgb(237, 242, 255);/*背景颜色*/ border-radius:5px;/*圆角*/ padding: 1px 2px 1px 2px;/*针对组合框中的文本内容*/ min-width:2em;/*组合框…...
计算机视觉算法实战——实时车辆检测和分类(主页有相关源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域介绍✨✨ 实时车辆检测和分类是计算机视觉中的一个重要应用领域,旨在从视频流或…...
what?ngify 比 axios 更好用,更强大?
文章目录 前言一、什么是ngify?二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…...
安装虚拟机VMware遇到的问题
问题1:进入如下界面,不知道如何操作 解决办法 键盘⬇️,选择“Reset the system”回车 问题2:系统存放位置我给放在了VMware安装目录,具体D:\software\VMware\Windows安装不行 解决办法:D:\software\virt…...
通过ESP32和INMP441麦克风模块实现音频数据传递
在现代物联网(IoT)项目中,音频数据的采集与传输成为了一个热门的应用领域。通过结合ESP32开发板和INMP441麦克风模块,我们可以实现一个低成本、高效率的音频数据传输系统。本文将详细介绍如何使用这两种硬件组件来构建和测试音频传…...
Vue中nextTick实现原理
源码实现思路(面试高分回答) 面试官问我 Vue 的 nextTick 原理是怎么实现的,我这样回答: 在调用 this.$nextTick(cb) 之前: 存在一个 callbacks 数组,用于存放所有的 cb 回调函数。存在一个 flushCallbac…...
数据仓库基础常见面试题
1.数据仓库是什么 数据仓库(Data Warehouse)是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持企业的管理决策。它不同于传统的操作型数据库,后者主要用于处理日常业务交易和实时查询,而数据仓库…...
Java设计模式——单例模式(特性、各种实现、懒汉式、饿汉式、内部类实现、枚举方式、双重校验+锁)
文章目录 单例模式1️⃣特性💪单例模式的类型与实现:类型懒汉式实现(线程不安全)懒汉式实现(线程安全)双重锁校验懒汉式(线程安全)饿汉式实现(线程安全)使用类的内部类实现⭐枚举方式实现单例(推荐)👍 单例…...
数字普惠金融对新质生产力的影响研究(2015-2023年)
基于2015—2023年中国制造业上市公司数据,探讨了数字普惠金融对制造业企业新质生产力的影响及作用机理。研究发现,数字普惠金融有助于促进制造业企业新质生产力的发展,尤其是在数字普惠金融的使用深度较大的情况下,其对新质生产力…...
国产编辑器EverEdit - 扩展脚本:新建同类型文件(避免编程学习者反复新建保存练习文件)
1 扩展脚本:在当前文件目录下新建同类型文件 1.1 应用场景 用户在进行编程语言学习时,比如:Python,经常做完一个小练习后,又需要新建一个文件,在新建文件的时候,不但要选择文件类型,…...
jupyter notebook练手项目:线性回归——学习时间与成绩的关系
线性回归——学习时间与学习成绩的关系 第1步:导入工具库 pandas——数据分析库,提供了数据结构(如DataFrame和Series)和数据操作方法,方便对数据集进行读取、清洗、转换等操作。 matplotlib——绘图库,p…...
dockerfile2.0
dockerfile实现lnmp nginx centos7 mysql centos7 php centos7 自定义镜像来实现整个架构 cd /opt mkdir nginx mysql php cd nginx 拖入nginx和wordpress vim Dockerfile vim nginx.conf ↓ worker_processes 1; events {worker_connections 1024; } http {include …...
【spring mvc】文件上传、下载
文件上传,存储至本地目录中 一、代码1、工具类(敏感后缀过滤)2、文件上传,存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类(敏感后缀过滤&#x…...
FPGA工程师成长四阶段
朋友,你有入行三年、五年、十年的职业规划吗?你知道你所做的岗位未来该如何成长吗? FPGA行业的发展近几年是蓬勃发展,有越来越多的人才想要或已经踏进了FPGA行业的大门。很多同学在入行FPGA之前,都会抱着满腹对职业发…...
java fastjson2 解析JSON用法解析
Fastjson2 是 Fastjson 的升级版本,提供了更好的性能和扩展性,同时也在 API 和功能上做了很多改进。使用 Fastjson2 解析 JSON 数据非常简单,支持多种方式来解析 JSON 字符串、嵌套 JSON 对象和数组、以及转换成 Java 对象。下面详细介绍 Fas…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
