使用Javascript:如何检索*串*号的小数位数?使用Javascript:如何检索*串*号的小

2019-05-13 20:56发布

我有一组具有小数,例如一串数字: 23.4569.450123.01 ...我需要找回小数每个号码的数量,因为他们知道至少有1位小数。

换句话说,所述retr_dec()方法应该返回以下内容:

retr_dec("23.456") -> 3
retr_dec("9.450")  -> 3
retr_dec("123.01") -> 2

尾随零也算在这种情况下,小数,与此相关的问题 。

有一个简单/交付方法在Javascript实现这一目标,或者我应该计算小数点位置,计算与字符串长度的区别? 谢谢

Answer 1:

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));
}

额外的复杂性是处理科学记数法等等

 decimalPlaces('.05') 2 decimalPlaces('.5') 1 decimalPlaces('1') 0 decimalPlaces('25e-100') 100 decimalPlaces('2.5e-99') 100 decimalPlaces('.5e1') 0 decimalPlaces('.25e1') 1 


Answer 2:

function retr_dec(num) {
  return (num.split('.')[1] || []).length;
}


Answer 3:

function retr_dec(numStr) {
    var pieces = numStr.split(".");
    return pieces[1].length;
}


Answer 4:

由于尚未基于正则表达式的回答:

/\d*$/.exec(strNum)[0].length

请注意,这个“失败”为整数,但每个问题的规范,他们将永远不会发生。



Answer 5:

你可以得到你的电话号码这样的小数部分的长度:

var value = 192.123123;
stringValue = value.toString();
length = stringValue.split('.')[1].length;

它使一个串的数量,分为二的字符串(在小数点),并返回该分割操作,并将其存储在“长度”变量返回的数组的第二元件的长度。



Answer 6:

目前公认的答案的一个稍微的改变,这增加了Number原型,从而使所有的数字变量来执行此方法:

if (!Number.prototype.getDecimals) {
    Number.prototype.getDecimals = function() {
        var num = this,
            match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
        if (!match)
            return 0;
        return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));
    }
}

它可用于像这样:

// Get a number's decimals.
var number = 1.235256;
console.debug(number + " has " + number.getDecimals() + " decimal places.");

// Get a number string's decimals.
var number = "634.2384023";
console.debug(number + " has " + parseFloat(number).getDecimals() + " decimal places.");

利用我们现有的代码,第二种情况下也可以很容易地添加到String原型,像这样:

if (!String.prototype.getDecimals) {
    String.prototype.getDecimals = function() {
        return parseFloat(this).getDecimals();
    }
}

使用此类似:

console.debug("45.2342".getDecimals());


Answer 7:

两个人在这里的混合的位,但这个工作对我来说。 在我的代码以外的案件不被别人在这里处理。 不过,我已经删除了科学的小数位计数器。 这也是我在大学曾经爱过!

numberOfDecimalPlaces: function (number) {
    var match = ('' + number).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
    if (!match || match[0] == 0) {
        return 0;
    }
     return match[0].length;
}


Answer 8:

尝试使用String.prototype.match()RegExp /\..*/ ,返回.length匹配字符串-1

 function retr_decs(args) { return /\./.test(args) && args.match(/\..*/)[0].length - 1 || "no decimal found" } console.log( retr_decs("23.456") // 3 , retr_decs("9.450") // 3 , retr_decs("123.01") // 2 , retr_decs("123") // "no decimal found" ) 



Answer 9:

我有,所以我创建了一个可以处理类似1E-7号的版本,以应对非常小的数字。

 Number.prototype.getPrecision = function() { var v = this.valueOf(); if (Math.floor(v) === v) return 0; var str = this.toString(); var ep = str.split("e-"); if (ep.length > 1) { var np = Number(ep[0]); return np.getPrecision() + Number(ep[1]); } var dp = str.split("."); if (dp.length > 1) { return dp[1].length; } return 0; } document.write("NaN => " + Number("NaN").getPrecision() + "<br>"); document.write("void => " + Number("").getPrecision() + "<br>"); document.write("12.1234 => " + Number("12.1234").getPrecision() + "<br>"); document.write("1212 => " + Number("1212").getPrecision() + "<br>"); document.write("0.0000001 => " + Number("0.0000001").getPrecision() + "<br>"); document.write("1.12e-23 => " + Number("1.12e-23").getPrecision() + "<br>"); document.write("1.12e8 => " + Number("1.12e8").getPrecision() + "<br>"); 



Answer 10:

基于利亚姆·米德尔顿的答案,这是我做了(没有科学记数法):

 numberOfDecimalPlaces = (number) => { let match = (number + "").match(/(?:\.(\d+))?$/); if (!match || !match[1]) { return 0; } return match[1].length; }; alert(numberOfDecimalPlaces(42.21)); 



Answer 11:

function decimalPlaces(n) {
  if (n === NaN || n === Infinity)
    return 0;
  n = ('' + n).split('.');
  if (n.length == 1) {
    if (Boolean(n[0].match(/e/g)))
      return ~~(n[0].split('e-'))[1];
    return 0;

  }
  n = n[1].split('e-');
  return n[0].length + ~~n[1];

}


文章来源: Javascript: How to retrieve the number of decimals of a *string* number?