首页 > 其他分享 >发票数字转金额大写(保留两位小数)

发票数字转金额大写(保留两位小数)

时间:2023-07-28 18:13:14浏览次数:38  
标签:index numStr Number 大写 num let 发票 resArr 小数

数字金额转大写

/**
* description 数字转换成大写
* params: val => number
*/
function translateNumber(val) {
    if (!Number(val) || !val) return 0
    let num = 0
    let copyNum = []
    if (String(val).includes('.')) { // 存在小数点的情况
        copyNum = String(val).split('.')
        num = Number(copyNum[0])
    } else {
	num = Number(val)
	}
    const numStr = Number((num + '').replace(/[,,]*/g, '')) + ''
    num = parseInt(Number(numStr)) // 转为整数
    let capitalArr = '零壹贰叁肆伍陆柒捌玖拾'
    let unitArr = ['拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'] // 单位
    const resArr = [] // 记录结果,后边json.in就可
    let index = numStr.length - 1 //记录位数
    let idu = 0 // 记录单位
    let decade = 10
    const capitalUp = (num, decade, index) => {
        const unit = num / decade
        const capital = capitalArr[Number(numStr[index])]
        if (unit < 1) {
            resArr.push(capital)
            // 出现一十一这种情况
            if (Number(numStr[index]) === 1 && (numStr.length === 2 || numStr.length === 6 || numStr.length === 10)) {
                resArr.pop()
            }
            return false
        } else {
            if (capital === '零') {
                // 万、亿单位不删除
                if (!['万', '亿'].includes(resArr[resArr.length - 1])) {
                    resArr.pop()
                }
                // 前面有零再删掉一个零
                if (resArr[resArr.length - 1] === '零') {
                    resArr.pop()
                }
            }
            resArr.push(capital)
            // 过滤存在 零万、零亿 这种情况
            if (['万', '亿'].includes(resArr[resArr.length - 2]) && capital === '零') {
                resArr.pop()
            }
            // 过滤 1亿万 这种情况
            if (resArr[0] === '万' && resArr[1] === '亿') {
                resArr.shift()
            }
            // 末尾 零 删掉
            if (resArr[0] === '零') {
                resArr.pop()
            }
            resArr.push(unitArr[idu++])
            capitalUp(num, decade * 10, --index)
        }
    }
    capitalUp(num, decade, index)
    let afterBox = []
    if (copyNum.length) { // 拼接角和分
        const strAfter = copyNum[1].substring(0, 2).split('')
        strAfter.forEach((i, index) => {
            const shuZhi = capitalArr[Number(i)]
            if (index === 0) {
                if (shuZhi !== '零') {
                    afterBox.push(shuZhi)
                    afterBox.push('角')
                }
            } else if (index === 1) {
                if (shuZhi !== '零') {
                    afterBox.push(shuZhi)
                    afterBox.push('分')
                }
            }
        })
    }
    return resArr.reverse().join('') + '元' + afterBox.join('')
}

标签:index,numStr,Number,大写,num,let,发票,resArr,小数
From: https://www.cnblogs.com/lutwelve/p/17588578.html

相关文章

  • java 截取小数点后面的数字
    Java截取小数点后面的数字在Java编程中,经常需要对小数进行处理,并且有时候需要截取小数点后面的数字。本文将介绍如何使用Java来实现截取小数点后面的数字,并提供相应的代码示例。方法一:使用字符串截取一种常见的方法是将小数转换为字符串,然后使用字符串的截取方法来获取小数点后......
  • python读取excel为什么是小数
    Python读取Excel为什么是小数在使用Python读取Excel文件时,经常会遇到一个问题:为什么读取的数据会以小数的形式显示,而不是原始的整数或文本呢?这个问题涉及到Python读取Excel的原理以及Excel中的数据类型的转换。Excel中的数据类型在Excel中,每个单元格都有自己的数据类型。常见的......
  • python如何生成随机两位小数
    使用Python生成随机两位小数在很多实际应用中,我们常常需要生成随机的两位小数。Python中提供了多种方法来实现这个需求。在本文中,我们将介绍两种常用的方法,分别是使用random模块和使用numpy库。方法一:使用random模块random模块是Python中用于生成伪随机数的模块,其中提供了多个生......
  • python取小数部分
    Python取小数部分在Python中,我们经常需要对浮点数进行操作,其中一个常见的需求是提取浮点数的小数部分。Python提供了多种方法来实现这个目标,本文将介绍其中几种常见的方法,并提供相应的代码示例。方法一:使用取余操作符取余操作符(%)可以用于获取一个数的小数部分。我们可以将浮点数......
  • python求小数平方
    Python求小数平方引言在Python中,要求一个小数的平方非常简单。本文将教会你如何实现这个功能。在开始之前,我们先来了解一下整个流程。下面是一张表格,展示了实现“Python求小数平方”的步骤。步骤描述步骤1输入一个小数步骤2使用相应的代码求平方步骤3输出结果......
  • 统计小数的位数java
    统计小数的位数简介在计算机编程中,我们经常需要统计一个小数的位数。统计小数位数可以帮助我们了解一个小数的精确程度,或者在处理特定问题时提供必要的信息。本文将介绍如何使用Java编程语言来统计小数的位数,并提供相应的代码示例。方法一:将小数转换为字符串一种简单的方法是将......
  • java 中保留一位小数有以下几种方法
    使用String.format()方法,它可以按照指定的格式化字符串来输出数值,比如“%.1f”表示保留一位小数。例如:doublenum=3.14159;Stringresult=String.format("%.1f",num);//result="3.1"复制使用DecimalFormat类,它可以按照指定的模式来格式化数值,比如“#.#......
  • C语言编程必备技能!小写转大写
    在C语言中,要区分字母的大小写,可以利用ASCII码中大写字母和小写字母之间的转换关系,差值为32,通过这个差值可以将小写字母转换为大写字母。下面编写程序实现该功能:从键盘输入一个小写字母,按回车键后,程序将该小写字母转换为大写字母,并输出其ASCII值。 程序的算法思想如下:......
  • Struts2中对数字进行格式化,1、将数字用 , 号分隔 2、将小数格式化为百分比 ...
    Struts2中对数字进行格式化,1、将数字用,号分隔2、将小数格式化为百分比2008-12-2422:36一、资源文件的配置(applicationResource_zh_CN.properties)format.number={0,number,###,###.##}format.discount={0,number,###.#######%}二、struts.xml<?xmlve......
  • 舍掉小数取整 Math.trunc(),以及 Math.floor() 、toFixed() 、Math.round()
    舍掉小数取整数的时候,如果是负数,那么Math.floor()的结果就不是我们想要的,要用Math.trunc()Math.floor()是向着更小的值取值Math.trunc()是想着接近零的值取值toFixed()是四舍六入,但是当保留位数的后一位是5的时候,规则太复杂Math.round()是四舍五入,经常用来处理浮点小数的......