JavaScript的数字运算不准的问题

发布时间 2023-10-17 17:08:27作者: 水手paul2008

JavaScript的运算问题存在两方面:

第一个表示不准问题:

打开浏览器按F12,在Console里,

输入0.1+0.2=0.30000000000000004

输入91.25*0.7 =63.87499999999999 

解决这个问题,要用第三方库math.js 或 decimal.js 

const math = require('mathjs');
console.log(math.add(0.1, 0.2));

 

第二个问题toFixed是银行家舍入,如果要求四舍五入,那需要另写方法。

银行家舍入是“四舍六入五进偶”(四舍六入五取偶)(四舍六入五成双)。例如

0.15.toFixed(1)=0.1; //5前一位是奇数1,“舍”,

0.25.toFixed(1)=0.3; //5前一位是偶数2,才会“入”,

其实浏览器toFixed不知什么算法,很乱。

/* 
* Number.toFiexed默认是四舍六入五进偶,而有些地方需要四舍五入。
* console.log(64.925.toFixed(2),64.935.toFixed(2)); 默认:64.92 64.94. 
* console.log(math.toFixed2(64.925,2),math.toFixed2(64.935,2)); 期待:64.93 64.94. 
*/
export function toFixed2(num, n) {
  //console.log('toFixed2')
  var rounded = math.round(num, n);
  var result = rounded.toString();
  if (n <= 0)
    return result;

  var idx = result.indexOf('.');
  if (idx < 0) {
    idx = result.length;
    result += '.';
  }
  while (result.length <= idx + n) {
    result += '0';
  }
  return result;
}