js把数字格式化成金额,并保留两位小数
js把数字格式化成金额,并保留两位小数
·
经常要对金额格式化,总结了以下方法。 代码从少到多。
一、最简单,也经常用的:利用字符串提供的toLocaleString()方法处理。(当然,有时候,不生效,我写APP的时候,没生效。用的时候,注意一下。)
style
格式化时使用的样式
“decimal”表示纯数字格式 , “currency”表示货币格式, 和"percent"表示百分比格式; 默认值是 “decimal”
currency
在货币格式化中使用的货币符号
“USD” 表示美元, “EUR” 表示欧元, "CNY"是人民币
没有默认值,如果样式是“currency”,必须提供货币属性. minimumFractionDigits
使用的小数位数的最小数目.可能的值是从0到20;默认为普通的数字和百分比格式为0;
//格式化金额(后面两位小数会四舍五入)
moneyFormats(value){
let a=Number(value); //转为数字格式
let b=a.toLocaleString('zh', { style: 'currency', currency: 'CNY' });
return b
},
二、适用所有场景,目前没发现问题。就是代码有点多。
// 金额 格式化
outputmoney(value) {
if (!value && value !== 0) return '-';
var intPart = Number(value) | 0; //获取整数部分
var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //将整数部分逢三一断
var floatPart = ".00"; //预定义小数部分
var value2Array = value.toString().split(".");
//=2表示数据有小数位
if (value2Array.length == 2) {
floatPart = value2Array[1].toString(); //拿到小数部分
if (floatPart.length == 1) { //补0,实际上用不着
return intPartFormat + "." + floatPart + '0';
} else {
return intPartFormat + "." + floatPart;
}
} else {
return intPartFormat + floatPart;
}
},
三、自己以前写的,太麻烦了,可以不用。我当时根据需求写的。
moneyFormat(number) {
number = String(number).replace(/\,/g, '')
if (isNaN(number) || number == '') return ''
number = Math.round(number * 100) / 100
if (number < 0)
return '-' + this.outputdollars(Math.floor(Math.abs(number) - 0) + '') + this.outputcents(Math.abs(number) - 0)
else return this.outputdollars(Math.floor(number - 0) + '') + this.outputcents(number - 0)
},
//格式化金额
outputdollars(number) {
if (number.length <= 3) return number == '' ? '0' : number
else {
var mod = number.length % 3
var output = mod == 0 ? '' : number.substring(0, mod)
for (var i = 0; i < Math.floor(number.length / 3); i++) {
if (mod == 0 && i == 0) output += number.substring(mod + 3 * i, mod + 3 * i + 3)
else output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3)
}
return output
}
},
outputcents(amount) {
amount = Math.round((amount - Math.floor(amount)) * 100)
return amount < 10 ? '.0' + amount : '.' + amount
},
总结:建议用方法一toLocaleString(),如果不行,可以用方法二。
更多推荐
已为社区贡献2条内容
所有评论(0)