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

本文详细介绍了如何通过自定义函数`toChineseNumber`将数字转换为中文表示,包括数字分割、零处理、单位转换和大单位添加等步骤,提供示例代码以展示功能。
摘要由CSDN通过智能技术生成

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))
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbamx.

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值