js浮点数精度丢失和toFixed四舍五入不准问题

1. js的浮点数计算不准确替代方案
 
例如:
0.1 + 0.2 = 0.30000000000000004 // 应该是 0.3
替代方案
  • big.js:  提供了十进制的计算,方法略少,但足够使用,体积最小。
  • bignumber.js:提供了超高精度的数字处理能力,可以解决精度丢失问题。
  • decimal.js:可以精确表示浮点数,解决精度丢失问题。
  • number-precision: 可以做四舍五入,加减乘除各种运算。
  • currency.js:货币格式化,优先使用  Intl.NumberFormat ,不行再使用此库。
 
2. toFixed四舍五入不准的替代方法
 
例如:
(2.005).toFixed(2) // '2.00', 应该是 2.01
(1.45).toFixed(1)  // '1.4', 应该是 1.5

替代方案

//重写toFixed
Number.prototype.toFixed=function(s) {
    const adjust = this >= 0 ? 0.5 : -0.5;
    return (parseInt(this * Math.pow( 10, s ) + adjust)/ Math.pow( 10, s )).toString();
}
//toLocaleString
function format(num, decimals){
    return num.toLocaleString('en-US', {
        minimumFractionDigits: 2,      
        maximumFractionDigits: 2,
        useGrouping: false
    })
}
//或者Intl.NumberFormat
function format(num, decimals){
    const formatter = new Intl.NumberFormat('en-US', {
        minimumFractionDigits: decimals,      
        maximumFractionDigits: decimals,
        useGrouping: false
    })
    return formatter.format(num)
}

 也可以直接使用上面的库来解决

 

 

出处:toFixed不精准问题的解决办法 
         js toFixed 四舍五入问题
         关于 js 中的精度丢失问题 

posted @ 2023-06-26 14:41  全玉  阅读(562)  评论(0编辑  收藏  举报