前端开发攻略---用JavaScript将数字转换为中文。支持万亿以下的正整数;深入解析:JavaScript 函数详解数字转换为中文的实现原理与流程

news2025/2/6 19:38:23

1、演示

2、实现思路

 函数名为 toChineseNumber,它的作用是将一个数字转换成对应的中文表示形式。这个函数是一个自定义的实现,通过一系列步骤将数字转换成中文。我会逐步解释每一部分,以确保您对代码的理解清晰明了。

首先,让我们从函数的整体结构开始解释:

  1. 函数参数和变量定义:函数接受一个参数 num,这个参数代表了要转换成中文的数字。函数内部定义了一些变量,比如 partsmapunitsbigUnits,它们在后续的转换过程中起到了关键作用。

  2. 处理数字的主要逻辑:函数通过一系列操作,将输入的数字转换成中文表示形式。这个过程包括将数字分割成若干部分、转换每个部分成中文、处理零的情况、添加大单位等。

详细解释每个步骤:

  1. 数字分割和处理:函数首先将输入的数字转换成字符串,并使用正则表达式在数字的千位上添加逗号作为千位分隔符,然后将字符串分割成若干部分,并过滤掉空部分。这样做的目的是为了方便后续的处理,使得每个部分的大小更容易理解和处理。

  2. 定义数字映射和单位:函数定义了两个数组 map 和 units,它们分别表示了数字和单位的中文表示。map 数组中存储了数字零到九的中文表示,而 units 数组则存储了十、百、千等单位的中文表示。这些数组在后续的转换过程中起到了关键作用,帮助将数字转换成对应的中文。

  3. 处理零的情况:函数定义了一个辅助函数 _handleZero,用于处理连续的零。在转换过程中,可能会出现连续的零,为了保持中文表示的规范性,需要将连续的零合并成一个零,并且去除末尾的零。

  4. 转换数字成中文:函数定义了另一个辅助函数 _transform,用于将每个部分的数字转换成对应的中文表示。这个函数通过遍历部分中的每个数字,并根据其位置和大小,将其转换成对应的中文数字和单位。转换过程中会考虑到零的情况,以确保中文表示的准确性和规范性。

  5. 处理大单位:函数定义了一个数组 bigUnits,用于表示十万、百万、千万等大单位的中文表示。在转换过程中,如果数字的部分较多,需要添加对应的大单位,以表示数字的大小。这个过程通过遍历每个部分,并根据其位置和大小,添加对应的大单位。

  6. 整理结果并返回:最后,函数会整理转换后的结果,并去除多余的零和末尾的零,然后将最终的中文表示返回给调用者。

通过这些步骤,函数可以将任意数字转换成对应的中文表示形式。这个函数的设计思路非常刚清晰,逻辑严谨,可以很好地完成数字到中文的转换任务。另外还可以根据您的特殊需求进行更改

3、源码(copy即可使用) 

    function toChineseNumber(num) {
      //  四位四位的进行分割
      const parts = num
        .toString()
        .replace(/(?=(\d{4})+$)/g, ',')
        .split(',')
        .filter(Boolean)

      const map = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
      const units = ['', '十', '百', '千']
      // 把连续的零给去掉 合并为1个零  当零在末尾的时候去掉
      function _handleZero(str) {
        return str.replace(/零+/g, '零').replace(/零$/, '')
      }
      function _transform(n) {
        let result = ''
        for (let i = 0; i < n.length; i++) {
          const c = map[n[i]]
          let u = units[n.length - i - 1]
          if (c === '零') {
            u = ''
          }
          result += c + u
        }
        result = _handleZero(result)
        return result
      }
      const bigUnits = ['', '万', '亿']
      let result = ''
      for (let i = 0; i < parts.length; i++) {
        const p = parts[i]
        const c = _transform(p)
        const u = bigUnits[parts.length - i - 1]
        if (c === '') {
          result += '零'
          continue
        }
        result += c + u
      }
      result = _handleZero(result)
      return result
    }

    console.log('12000000000 --->', toChineseNumber(12000000000))
    console.log('12341234000 --->', toChineseNumber(12341234000))
    console.log('12000012340 --->', toChineseNumber(12000012340))
    console.log('98765432100 --->', toChineseNumber(98765432100))
    console.log('45600012308 --->', toChineseNumber(45600012308))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024第十五届蓝桥杯 C/C++ B组 参赛经历分享(以及部分题解)

前言 emmmmmm&#xff0c;dp杯居然不考dp了&#xff0c;蓝桥一直没怎么出过的高精度居然也考了&#xff08;当时居然因为没太复习那块知识直接模拟混分了&#xff09;&#xff0c;题量也改了&#xff0c;总的来说反而简单了&#xff1f;。。。还好天津竞赛弱省&#xff0c;但愿…

STM32学习和实践笔记(12):蜂鸣器实验

蜂鸣器主要分为两种&#xff0c;一种是压电式的无源蜂鸣器&#xff0c;一种是电磁式的有源蜂鸣器。 有源和无源是指其内部有没有振荡器。 无源的没有内部振荡器&#xff0c;需要输入1.5-5KHZ的音频信号来驱动压电蜂鸣片发声。 有源的内部有振荡器&#xff0c;因此只需要供给…

Jackson 2.x 系列【24】Spring Web 集成

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. Spring Web3. Jackson2ObjectMapperBuilder4. Jackson2ObjectMapperFa…

STL —— priority_queue

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C专栏 本篇文章主要讲解 priority_queue 的相关内容 目录 1. 优先级队列简介 基本操作 2. 模拟实现 2.1 入队操作 2.2 出队操作 2.3 访问队列顶部元素 2.4 判断优先队列是否为空 2.5 获取优先队列的大小 …

分布式向量数据库-安装部署

下载 GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres 源码编译 ##文件解压缩 unzip pgvector-0.6.2.zip ##编译 make && make install 功能验证 #安装扩展CREATE EXTENSION vector;#创建测试表CREATE TABLE items (id bigseri…

mysql题目1

tj11: ​ select * from t_student where grade 大一 and major 软件工程 ​ tj12: SELECTt_student.name, count(t_choice.cid)FROMt_choiceINNER JOINt_courseON t_choice.cid t_course.idINNER JOINt_studentON t_choice.sid t_student.id GROUP BYt_choice.sid HAVIN…

【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效,灰度、负片、像素化特效

前言 【Unity 实用工具篇】 | UIEffect 实现一系列UGUI特效&#xff0c;灰度、负片、像素化特效一、UGUI特效插件&#xff1a;UIEffect1.1 介绍1.2 效果展示1.3 使用说明及下载 二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 使用灰度特效做头像(关卡)选择 总结 前…

win11电脑驱动怎么更新,windows11更新驱动

驱动是指计算机里软件的程序,硬件的运作离不开驱动的支持,因为驱动就是使得硬件和电脑系统沟通的桥梁。既然驱动如此重要,那么不装肯定不行,如果有问题,也要及时地修复和更新。最近,有位win11用户,想要了解win11电脑驱动怎么更新?接下来,教程会带来两种更新win11驱动的…

CodeForce[1500-2000]——1948D Tandem Repeats?

大概题目意思就是&#xff1a;给你一个只有小写字母和问号的字符串&#xff0c;可以在头或尾删除任意长度&#xff0c;得到一个字串&#xff0c;并且该字串要满足长度为偶数&#xff0c;前一半和后一半&#xff08;问号可以匹配任意字符&#xff09;相等&#xff0c;求这样的字…

专治Java底子差,线程操作篇(2)

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

2024五一杯数学建模A题B题C题思路汇总分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

设计模式——2_9 模版方法(Template Method)

人们往往把任性也叫做自由&#xff0c;但是任性只是非理性的自由&#xff0c;人性的选择和自决都不是出于意志的理性&#xff0c;而是出于偶然的动机以及这种动机对感性外在世界的依赖 ——黑格尔 文章目录 定义图纸一个例子&#xff1a;从文件中获取信息分几步&#xff1f;Rea…

Hive概述与基本操作

一、Hive基本概念 1.什么是hive? &#xff08;1&#xff09;hive是数据仓库建模的工具之一 &#xff08;2&#xff09;可以向hive传入一条交互式的sql,在海量数据中查询分析得到结果的平台 2.Hive简介 Hive本质是将SQL转换为MapReduce的任务进行运算&#xff0c;底层由HDFS…

经典文献阅读之--A Survey on Generative Diffusion Models(扩散模型最新综述)

0. 简介 本文综述了深度生成模型&#xff0c;特别是扩散模型(Diffusion model)&#xff0c;如何赋予机器类似人类的想象力。扩散模型在生成逼真样本方面显示出巨大潜力&#xff0c;克服了变分自编码器中的后分布对齐障碍&#xff0c;缓解了生成对抗网络中的对抗性目标不稳定性…

深度挖掘响应式模式的潜力,从而精准优化AI与机器学习项目的运行效能,引领技术革新潮流

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f525; 转载自热榜文章&#xff1a;探索设计模式的魅力&#xff1a;深度挖掘响应式模式的…

uni-starter的微信登录拿不到登录者的昵称,头像,手机号问题记录

uni-starter的微信登录竟然拿不到登录者的昵称&#xff0c;头像&#xff0c;手机号 获取手机号的方法在另外一篇文章中&#xff0c;需要认证&#xff0c;需要有营业执照 uni.login({"provider": type,"onlyAuthorize": true,// #ifdef APP"univerif…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

Docker Desktop修改镜像存储路径 Docker Desktop Start ... 卡死

1、CMD执行wsl -l -v --all 2、Clean / Purge data 3、导出wsl子系统镜像: wsl --export docker-desktop D:\docker\wsl\distro\docker-desktop.tar wsl --export docker-desktop-data D:\docker\wsl\data\docker-desktop-data.tar4、删除现有的wsl子系统&#xff1a; wsl -…

智游剪辑网页版发布了!

你是否因为软件安装麻烦而不愿意尝试本软件&#xff1f;那么可以试试网页版&#xff01;只需要一个浏览器&#xff0c;就可以直接访问了&#xff0c;网页版免安装&#xff0c;无广告&#xff0c;大部分功能都可以免费使用&#xff01; 网页版地址&#xff1a;app.zyjj.cc 界面…

汇编基础-----通过x64dbg了解什么是堆栈

汇编基础-----通过x64dbg了解什么是堆栈 什么是堆栈 在汇编语言中&#xff0c;堆栈&#xff08;stack&#xff09;是一种用于存储临时数据和执行函数调用的内存结构。堆栈是一种后进先出&#xff08;Last-In-First-Out, LIFO&#xff09;的数据结构&#xff0c;通常用于保存函…