js封装,小写金额转化为大写金额,用于发票金额、合同资金等
代码
<script setup>
import { changeBigNum } from '@/utils/tool'
import { inject,onMounted,watch,computed,onBeforeUnmount,ref } from 'vue'
const allPriceBig = computed(() => { //计算展示总报价的大写数字
return changeBigNum(allPriceForm.value.allPrice)
})
//示例
var num = ref('34.56')
console.log(changeBigNum(num)) // 叁拾肆元伍角陆分
</script>
封装方法
src\utils\utils.js
// 小写金额转化为大写金额
export function changeBigNum(val){
let cnNums = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'] //汉字数字
let cnIntRadice = ['','拾','佰','仟'] //基本单位
let cnIntUnits = ['元','万','亿','兆'] //整数部分扩展单位
let cnDecUnits = ['角','分','毫','厘'] //小数部分扩展单位
// let cnInteger = '整'
let cnIntLast = '元'
let integerNum //金额的整数部分
let decimalNum //金额的小数部分
let chineseStr = '' //输出的中文金额字符串
let parts; //分离金额后用的数组
if(val== ''){
return ''
}
if(val == 0){
// return cnNums[0] + cnIntLast + cnInteger
return cnNums[0] + cnIntLast
}
// 转化为字符串
val = val + ''
if(val.indexOf('.') == -1){
integerNum = val
decimalNum = ''
}else{
parts = val.split('.')
integerNum = parts[0]
decimalNum = parts[1].substr(0,4)
}
// 获取整形部分转化
if(parseInt(integerNum,10)>0){
let zeroCount = 0
let IntLen = integerNum.length
for(let i=0;i<IntLen;i++){
let n = integerNum.substr(i,1)
let p = IntLen - i - 1
let q = p / 4
let m = p % 4
if(n == 0){
zeroCount ++
}else{
if(zeroCount > 0){
chineseStr += cnNums[0]
}
// 归0
zeroCount = 0
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]
}
if(m==0 && zeroCount<4){
chineseStr += cnIntUnits[q]
}
}
// chineseStr += cnIntLast
}
// 小数部分
if(decimalNum != ''){
let decLen = decimalNum.length
for(let i=0;i<decLen;i++){
let n = decimalNum.substr(i,1)
if(n != 0){
chineseStr+=cnNums[Number(n)]+cnDecUnits[i]
}
}
}
if(chineseStr == ''){
// chineseStr += cnNums[0]+ cnIntLast + cnInteger
chineseStr += cnNums[0]+ cnIntLast
}else if(decimalNum == ''){
// chineseStr += cnInteger
chineseStr += ''
}
return chineseStr
}