查找数字的最小增量

时间:2017-10-09 19:58:18

标签: javascript

JavaScript中是否有内置功能允许您在不扩展的情况下获得特定数字的最小增量?例如:

var i = 0.0003412
smallest increment = 0.0000001

var j = 0.011
smallest increment = 0.001

可以计算长度并在结尾处扔1,当然。但是有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果这是您的问题,那么没有内置功能。你必须自己想出一个解决方案。像这样:

Math.pow(0.1, String(num).split('.')[1].length)

答案 1 :(得分:0)

解析值的另一种方法。

function smallestIncrement(nr) {
  if (nr < 0) nr = -nr;
  let str = nr.toExponential(),
    e = str.indexOf("e");

  return Number("1e" + (str.substr(e + 1) - Math.max(0, e - 2)));
}
//just for completeness
function biggestIncrement(nr) {
  if (nr < 0) nr = -nr;
  let str = nr.toExponential();
  return Number("1" + str.substr(str.indexOf("e")))
}

//floating point math has issues. like:
//0.1 + 0.2 === 0.30000000000000004
function fixFloat(v){
   return Math.round(v/1e-14)*1e-14;
}

[
  0.0003412,
  -3000,
  12.340,
  0.0000000123
].forEach(nr => {
  console.log(
    nr,
    fixFloat(nr+smallestIncrement(nr)),
    fixFloat(nr+biggestIncrement(nr))
  );
})
.as-console-wrapper {
  top: 0;
  max-height: 100%!important
}

您声明对于没有小数位的值,您希望步骤为1。

我没有将这些添加到函数中,因为我没有看到,1.234e-101.234e+10之间逻辑应该如何/为何存在差异。
您可以通过执行简单的Math.min(1, smallestIncrement(nr))或将代码更改为return Number("1e" + Math.min(0, str.substr(e + 1) - Math.max(0, e - 2)));

来解决此问题