保留两位小数

132 阅读1分钟

保留两位小数

四舍五入

(0.1+0.2)*100/100 // 0.30000000000000004
(parseInt(0.30000000000000004 * 100) / 100).toFixed(2) // 0.30

不要使用此方法

(parseInt(val * 100) / 100).toFixed(2)

反例:

(parseInt(33.3* 100) / 100).toFixed(2)  // 33.29

如果想保留两位有效小数,至少要 * 1000/ 1000

(parseInt(33.3* 1000) / 1000).toFixed(2)  // 33.30

但是使用这种方法,最开始的 val 要注意,要保证 val * 1000 不要丢失精度

使用库

比如:bignumber.js

import BigNumber from 'bignumber.js'

new BigNumber(val).toFixed(2)

截取(不进行四舍五入)

不要使用下列方法

(Math.floor(val * 100) / 100).toFixed(2)

反例:

(Math.floor(33.3 * 100) / 100).toFixed(2)  // 33.29

可以直接使用 js 方法 进行截取

/**
 * 将数字转换为保留两位小数的字符串
 * 如果数字本身就是整数,则返回带有两位小数
 * 如果数字的小数部分少于两位,则在末尾补0至两位
 * 如果数字的小数部分多于两位,则截取前两位
 *
 * @param {number} num - 需要转换的数字
 * @returns {string} - 转换后的字符串
 */

function truncateToTwoDecimalsString(num) {
    num = num || 0
    let strNum = num.toString()
    let parts = strNum.split('.')

    let res

    if (parts.length === 1) {
        res = strNum
    } else {
        res = `${parts[0]}.${parts[1].substring(0, 2)}`
    }
    return (+res).toFixed(2)
}
truncateToTwoDecimalsString(1) // 1.00
truncateToTwoDecimalsString(33.3) // 33.30