通常我们对于小数位的数据进行保留两位,都是使用.toFixed(2),但是实际上会存在精度问题,例如:587.545, toFixed之后的结果是587.54而不是我们想要的587.55,所以为了精度准确,用了以下方法处理,解决!√
let formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
})
// function removeThousandSeparator(str) {
// return str.replace(/,/g, '');
// }
// 处理金额保留两位小数点,并进行小数点四舍五入精度问题
const formaterMoney = (data: any) => {
if (!data) return "0.00"
// 将数据分割,保留两位小数
const integer = data.toFixed(2)
// // 获取整数部分
const intPart = Math.trunc(integer)
// 最终处理后结果
let temp = ''
// // 处理小数部分
if ((data + '').includes('.')){
const dot = data.toString().split(".")[1]
if (dot.length == 1) {
temp = data + '0'
}
if (dot.length == 2) {
temp = data + ''
}
if (dot.length > 2) {
let num = formatter.format(data)
temp = num.includes(',') ? num.replace(/,/g, '') : num // 千分位符去除
}
} else {
temp = intPart + '.00'
}
return temp
}