Javascript:如何以十进制格式获得微米级

时间:2017-11-21 20:24:37

标签: javascript

我有简单的函数来计算小数位数, 例如。 _d(0.01) = 2_d(0.001) = 3等等。

我们在系统中添加了一些新硬币,其数量为0.00000001且功能已损坏。

原因如下: 0.00000001.toString() = 1e-8,所以我不能把它分成'.'并按照我之前的计算来计算第二部分的长度。

所以问题是 - 如何从'0.00000001'数字最简单的方式获取字符串0.00000001

修改 我的意思并不是'0.00000001',我的意思是任何微米级到十进制而没有exp。一些可以_d(x)起作用的函数_d(0.000000000012) = '0.000000000012',依此类推。通常toString()对较大(但不是太大)的数字做什么。

5 个答案:

答案 0 :(得分:4)

使用具有大量数字的toFixed(),然后计算小数点后的零数。

function _d(num) {
    var str = num.toFixed(100);
    var fraction = str.split('.')[1];
    var zeros = fraction.match(/^0*/)[0].length;
    return zeros + 1;
}
console.log(_d(0.1));
console.log(_d(0.01));
console.log(_d(0.000000001));

答案 1 :(得分:2)

你想要这样的事吗

function decimalPlaces(num) {
  var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
  if (!match) { return 0; }
  return Math.max(
       0,
       // Number of digits right of decimal point.
       (match[1] ? match[1].length : 0)
       // Adjust for scientific notation.
       - (match[2] ? +match[2] : 0));
}

console.log(decimalPlaces(0.000000001))

答案 2 :(得分:1)

首先,我从这里得到了一些灵​​感: How to avoid scientific notation for large numbers in JavaScript?

您可以将数字转换为强数字,然后检查str.indexOf(" e")。如果为true,则返回字符串的科学记数部分。例如:

  function _d() {
    // your current function here
    if (str.indexOf("e")) {
      var something = str.split("-")[1];
      return something;
    }
  }
编辑:我在你最后一次评论之前就是在做这个,所以这会返回一个数字的字符串,我认为这就是你想要的。 暂且不谈有效数字,这是有意义和正确的,但不能解决您的问题,请尝试这一点。我们取数字,转换为字符串,如果该字符串不是科学记数法,那么答案是微不足道的。如果它是科学记数法,那么将字符串拆分两次(一次打开" e - "然后将第0个数组拆分为"。"将str [1] -1个零添加到数字的前导并将数字添加到结尾。

function _d(arg) {
  var str = arg.toString();
  if (str.indexOf("e-")) {
    var digits = str.split("e-")[0];
    var zeroes = str.split("e-")[1];
    var zero = Number(zeroes);
    var each = digits.split(".");
    var something = "0.";
    for (var i = 0; i < zeroes-1; i++) {
      something += "0";
    }
    for (var j = 0; j < each.length; j++) {
      something = something + each[j];
    }
    return something;
  }
}

这不会使用非常大的数字或非常小的负数。它非常复杂。

答案 3 :(得分:0)

将其保留为完整小数:

Number(0.000001)
// 0.000001

将其显示为字符串:

0.000001.toFixed(6)
// "0.000001"

enter image description here

答案 4 :(得分:0)

另一种方法是使用.toString(),然后查找.length-2(2个字符 - &#39; 0。&#39;。它应该为您提供零个数。

此方法的优点是您无需知道数字中的最大小数位数。