js 金额格式化 和 转成人民币大写金额形式

32 篇文章 0 订阅
2 篇文章 0 订阅

方法一

let num = 3333
num.toFixed(2).replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g,'$&,')
// 3,333.00

方法二:

// 金额格式化 
function formatNumber(number, pattern, bNoZero, nZeroLen) {
	bNoZero = (eval(bNoZero) !== false);
	switch (pattern) {
	case 1:
	case "JE_2":
		pattern = '#,___.00'
		break
	case 2:
	case "JE":
		pattern = '#,___.00'
		break
	case 2:
	case "SL":
		pattern = '#,___#'
		break
	case "SL_1":
		pattern = '#,___.0'
		break
    case "SL_2":
        pattern='#___.00'
        if((number+"")=="") return ""
        break
	case 3:
	case "AREA"	:
	    pattern = '#,___.000'
	break
	case "SELF":
		return (number === 0 && bNoZero)? "" : number
	break
	case null:
		pattern = "#.00#"
	}
	var nZeroLen = parseInt(nZeroLen || "0")
	if (nZeroLen > 0 && pattern.indexOf('.') !== -1) {
		var sTmpFormat = ""
		var sFormatE = pattern.split('.')[1]
		sFormatE = sFormatE.replace(/0/ig, '')
		for (var i = 0; i < nZeroLen; i++) {
			sTmpFormat += "0"
		}
		pattern = pattern.split('.')[0] + "." + sTmpFormat + sFormatE
	}
	var bNig = (number < 0)
	number = Math.abs(number)
	if (number === 0 && bNoZero) return ""		
	var str = number.toString()
	var strInt
	var strFloat
	var formatInt
	var formatFloat
	if (/\./g.test(pattern)) {
		formatInt = pattern.split('.')[0]
		formatFloat = pattern.split('.')[1]
	} else {
		formatInt = pattern
		formatFloat = null
	}

	if(/\./g.test(str)) {
		if (formatFloat !== null) {
			var tempFloat = Math.round(parseFloat('0.' + str.split('.')[1]) * Math.pow(10, formatFloat.length)) / Math.pow(10, formatFloat.length)
			strInt = (Math.floor(number)+Math.floor(tempFloat)).toString()
			strFloat = /\./g.test(tempFloat.toString()) ? tempFloat.toString().split('.')[1] : '0'
		} else {
			strInt = Math.round(number).toString()
			strFloat = '0'
		}
	} else {
		strInt = str
		strFloat = '0'
	}
	if (formatInt !== null) {
		var outputInt = ''
		var zero = formatInt.match(/0*$/)[0].length
		var comma = null
		if (/,/g.test(formatInt)) {
			comma = formatInt.match(/,[^,]*/)[0].length - 1
		}
		var newReg = new RegExp('(\\d{' + comma + '})', 'g')

		if (strInt.length < zero) {
			outputInt = new Array(zero + 1).join('0') + strInt;
			outputInt = outputInt.substr(outputInt.length - zero, zero)
		} else {
			outputInt = strInt
		}

		var outputInt = outputInt.substr(0,outputInt.length%comma)+outputInt.substring(outputInt.length%comma).replace(newReg, (comma !== null ? ',' : '') + '$1')
		outputInt = outputInt.replace(/^,/, '')
		strInt = outputInt
	}

	if (formatFloat !== null) {
		var outputFloat	= ''
		var zero = formatFloat.match(/^0*/)[0].length
		if (strFloat.length < zero) {
			outputFloat	= strFloat + new Array(zero + 1).join('0')
			//outputFloat	= outputFloat.substring(0,formatFloat.length);
			var outputFloat1 = outputFloat.substring(0, zero)
			var outputFloat2 = outputFloat.substring(zero,formatFloat.length)
			outputFloat	= outputFloat1 + outputFloat2.replace(/0*$/, '')
		} else {
			outputFloat	= strFloat.substring(0, formatFloat.length)
		}
		strFloat = outputFloat
	} else {
		if (pattern !== '' || (pattern === '' && strFloat === '0')) {
			strFloat = ''
		}
	}
	var sData = strInt + (strFloat === '' ? '' : '.' + strFloat)
	return (bNig ? "-" : "") + sData
}

alert(formatNumber(32323.444, "#,###.##"))
alert(formatNumber(32323.444, "JE"))

方法三:

// 转成人民币大写金额形式
export function numToZW(num) {
  // return numToRMB(num).replace(/零元整/ig,"").replace(/元.*/ig,"")
  return numToRMB(num)
}

// 转成人民币大写金额形式
export function numToRMB(num) {
  var str1 = '零壹贰叁肆伍陆柒捌玖' // 0-9所对应的汉字
  var str2 = '万仟佰拾亿仟佰拾万仟佰拾元角分' // 数字位所对应的汉字
  var str3 // 从原num值中取出的值
  var str4 // 数字的字符串形式
  var str5 = '' // 人民币大写金额形式
  var i // 循环变量
  var j // num的值乘以100的字符串长度
  var ch1 // 数字的汉语读法
  var ch2 // 数字位的汉字读法
  var nzero = 0 // 用来计算连续的零值是几个

  num = Math.abs(num).toFixed(2) // 将num取绝对值并四舍五入取2位小数
  str4 = (num * 100).toFixed(0).toString() // 将num乘100并转换成字符串形式
  j = str4.length // 找出最高位
  if (j > 15) { return '溢出' }
  str2 = str2.substr(15 - j) // 取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分

  // 循环取出每一位需要转换的值
  for (i = 0; i < j; i++) {
    str3 = str4.substr(i, 1) // 取出需转换的某一位的值
    if (i !== (j - 3) && i !== (j - 7) && i !== (j - 11) && i !== (j - 15)) { // 当所取位数不为元、万、亿、万亿上的数字时
      if (str3 === '0') {
        ch1 = ''
        ch2 = ''
        nzero = nzero + 1
      } else if (str3 !== '0' && nzero !== 0) {
        ch1 = '零' + str1.substr(str3 * 1, 1)
        ch2 = str2.substr(i, 1)
        nzero = 0
      } else {
        ch1 = str1.substr(str3 * 1, 1)
        ch2 = str2.substr(i, 1)
        nzero = 0
      }
    } else { // 该位是万亿,亿,万,元位等关键位
      if (str3 !== '0' && nzero !== 0) {
        ch1 = '零' + str1.substr(str3 * 1, 1)
        ch2 = str2.substr(i, 1)
        nzero = 0
      } else if (str3 !== '0' && nzero === 0) {
        ch1 = str1.substr(str3 * 1, 1)
        ch2 = str2.substr(i, 1)
        nzero = 0
      } else if (str3 === '0' && nzero >= 3) {
        ch1 = ''
        ch2 = ''
        nzero = nzero + 1
      } else {
        if (j >= 11) {
          ch1 = ''
          nzero = nzero + 1
        } else {
          ch1 = ''
          ch2 = str2.substr(i, 1)
          nzero = nzero + 1
        }
      }
    }

    if (i === (j - 11) || i === (j - 3)) { // 如果该位是亿位或元位,则必须写上
      ch2 = str2.substr(i, 1)
    }
    str5 = str5 + ch1 + ch2

    if (i === j - 1 && str3 === '0') { // 最后一位(分)为0时,加上“整”
      str5 = str5 + '整'
    }
  }
  if (num === 0) {
    str5 = '零元整'
  }
  return str5
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值