首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript中浮点精度的处理

Javascript中浮点精度的处理
EN

Stack Overflow用户
提问于 2012-07-28 05:03:42
回答 3查看 228.9K关注 0票数 113

我在javascript中有大量的数值y。我希望通过将它们向下舍入到最接近的x倍数来对它们进行分组,并将结果转换为字符串。

如何避免令人讨厌的浮点精度?

例如:

代码语言:javascript
复制
0.2 + 0.4 = 0.6000000000000001

我试过两件事:

代码语言:javascript
复制
>>> y = 1.23456789 
>>> x = 0.2 
>>> parseInt(Math.round(Math.floor(y/x))) * x; 
1.2000000000000002

和:

代码语言:javascript
复制
>>> y = 1.23456789 
>>> x = 0.2 
>>> y - (y % x)
1.2000000000000002
EN

回答 3

Stack Overflow用户

发布于 2014-03-19 22:07:48

代码语言:javascript
复制
> var x = 0.1
> var y = 0.2
> var cf = 10
> x * y
0.020000000000000004
> (x * cf) * (y * cf) / (cf * cf)
0.02

快速解决方案:

代码语言:javascript
复制
var _cf = (function() {
  function _shift(x) {
    var parts = x.toString().split('.');
    return (parts.length < 2) ? 1 : Math.pow(10, parts[1].length);
  }
  return function() { 
    return Array.prototype.reduce.call(arguments, function (prev, next) { return prev === undefined || next === undefined ? undefined : Math.max(prev, _shift (next)); }, -Infinity);
  };
})();

Math.a = function () {
  var f = _cf.apply(null, arguments); if(f === undefined) return undefined;
  function cb(x, y, i, o) { return x + f * y; }
  return Array.prototype.reduce.call(arguments, cb, 0) / f;
};

Math.s = function (l,r) { var f = _cf(l,r); return (l * f - r * f) / f; };

Math.m = function () {
  var f = _cf.apply(null, arguments);
  function cb(x, y, i, o) { return (x*f) * (y*f) / (f * f); }
  return Array.prototype.reduce.call(arguments, cb, 1);
};

Math.d = function (l,r) { var f = _cf(l,r); return (l * f) / (r * f); };

> Math.m(0.1, 0.2)
0.02

你可以查看完整的解释here

票数 5
EN

Stack Overflow用户

发布于 2013-04-09 23:01:55

请查看此链接..这对我帮助很大。

http://www.w3schools.com/jsref/jsref_toprecision.asp

toPrecision(no_of_digits_required)函数返回一个string,所以不要忘记使用parseFloat()函数将其转换为所需精度的小数点。

票数 3
EN

Stack Overflow用户

发布于 2012-07-28 05:14:17

为了完成这个任务,我将首先找到x中的小数位数,然后相应地对y进行舍入。我会使用:

代码语言:javascript
复制
y.toFixed(x.toString().split(".")[1].length);

它应该将x转换为字符串,将其在小数点上拆分,找到正确部分的长度,然后y.toFixed(length)应该根据该长度对y进行舍入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11695618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档