保留两位小数
四舍五入
(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