保留两位小数

176 阅读1分钟

toFixed会造成精度丢失

ChatGPT的答案

export function numFormat(value) {
    if (typeof value !== 'number') {
        return '0.00';
    }

    // 截断小数部分,保留两位小数
    const intValue = Math.floor(value * 100) / 100;

    // 使用toLocaleString来添加千位分隔符
    return intValue.toLocaleString('en-US', {
        minimumFractionDigits: 2,
        maximumFractionDigits: 2,
    });
}


答案二

// 金额转换,保留两位
export function numFormat(value) {
    let sign = value < 0 ? '-' : ''
    if (!value) return '0.00'

    /*原来用的是Number(value).toFixed(0),这样取整时有问题,例如0.51取整之后为1*/
    /*后来改成了 Number(value)|0,但是输入超过十一位就为负数了 */
    var intPart = Number(value) - (Number(value) % 1) //获取整数部分(这里是windy93的方法)
    var intPartFormat = Math.abs(intPart)
        .toString()
        .replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') //将整数部分逢三一断
    intPartFormat = sign + intPartFormat // 处理正负
    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').toString()
        } else {
            if (floatPart.length > 2) {
                floatPart = floatPart.substring(0, 2)
            }
            return (intPartFormat + '.' + floatPart).toString()
        }
    } else {
        return (intPartFormat + floatPart).toString()
    }
}