在JavaScript中添加大小数位数

时间:2016-07-24 21:23:40

标签: javascript

我正在尝试将这个大十进制数加在一起得到9999999999.9999999999,但我得到的是10000000000。

以下是代码:

function add(x, y) {

    var filterFloat = function (value) {
      if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
        .test(value))
        return Number(value);
    return NaN;
  }

    if (typeof x == 'string') {
    filterFloat(x);
    console.log(x);
  }; 
  if (typeof y == 'string') {
    filterFloat(y);
    console.log(y);
  };

  var z = filterFloat(x) + filterFloat(y);
  //var short = z.toFixed(4);
  //console.log(short);
  //return short.toString();
  //return z.toString();
  return z;
  var zz = z.toString();
  return zz;
  //console.log(typeof zz);

}

以下是传递的论据:

add("1234567890.0987654321", "8765432109.9012345678");

见下面的小提琴:

https://jsfiddle.net/emporio/gythd5dr/

2 个答案:

答案 0 :(得分:1)

这很可能是floating-point precision在工作。通常,由现代CPU计算的浮点数只是大致正确,并且有很多边缘情况,就像您正在经历的那样。这是由于CPU中寄存器的长度有限。

如果你需要任意精度,你需要回退到一个(慢得多)处理它的库(或者当然是手工完成)。

示例:https://github.com/MikeMcl/bignumber.js

答案 1 :(得分:0)

你到目前为止试过这个吗?

https://shamim8888.wordpress.com/languages/bigdecimal-in-javascript/

我认为这可能适合你。我之前用过它。