使用Javascript获取小数位数

时间:2014-11-22 20:49:03

标签: javascript

如何用Javascript计算实数的小数位数(不是数字)?

function countDecimals(number) {

}

例如,给定245.395,它应返回3.

8 个答案:

答案 0 :(得分:3)

主要思想是将数字转换为字符串并获得"的索引。"

var x = 13.251256;
var text = x.toString();
var index = text.indexOf(".");
alert(text.length - index - 1);

答案 1 :(得分:2)

像这样:

var val = 37.435345;
var countDecimals = function(value) {
    if (Math.floor(value) !== value)
        return value.toString().split(".")[1].length || 0;
    return 0;
}
countDecimals(val);

答案 2 :(得分:1)

我尝试了该线程中的一些解决方案,但是由于遇到一些限制,我决定在这些解决方案的基础上进行构建。下面的版本可以处理:字符串,双精度和整数输入,它也忽略了我的应用程序所需的任何无关紧要的零。因此0.010000将被计算为2个小数位。最多只能保留15个小数位。

  function countDecimals(decimal)
    {
    var num = parseFloat(decimal); // First convert to number to check if whole

    if(Number.isInteger(num) === true)
      {
      return 0;
      }

    var text = num.toString(); // Convert back to string and check for "1e-8" numbers
    
    if(text.indexOf('e-') > -1)
      {
      var [base, trail] = text.split('e-');
      var deg = parseInt(trail, 10);
      return deg;
      }
    else
      {
      var index = text.indexOf(".");
      return text.length - index - 1; // Otherwise use simple string function to count
      }
    }

答案 3 :(得分:0)

您可以使用一个简单的函数,在小数位(如果有的话)上进行分割,并在此之后计算数字。由于小数位可以表示为'。'或',' (或者可能是其他一些角色),你可以测试它并使用适当的:

function countPlaces(num) {
    var sep = String(23.32).match(/\D/)[0];
    var b = String(num).split(sep);
  return b[1]? b[1].length : 0;
}

console.log(countPlaces(2.343)); // 3
console.log(countPlaces(2.3));   // 1
console.log(countPlaces(343.0)); // 0
console.log(countPlaces(343));   // 0

答案 4 :(得分:0)

这是一种不依赖于将任何东西转换为字符串的方法:

function getDecimalPlaces(x,watchdog)
{
    x = Math.abs(x);
    watchdog = watchdog || 20;
    var i = 0;
    while (x % 1 > 0 && i < watchdog)
    {
        i++;
        x = x*10;
    }
    return i;
}

请注意,计数不会超过watchdog值(默认为20)。

答案 5 :(得分:0)

var value = 888;
var valueLength = value.toString().length;

答案 6 :(得分:0)

基于Gosha_Fighten的解决方案,与整数兼容:

function countPlaces(num) {
    var text = num.toString();
    var index = text.indexOf(".");
    return index == -1 ? 0 : (text.length - index - 1);
}

答案 7 :(得分:0)

基于LePatay的解决方案,还应注意科学符号(例如3.7e-7)和es6语法:

function countDecimals(num) {
  let text = num.toString()
  if (text.indexOf('e-') > -1) {
    let [base, trail] = text.split('e-')
    let elen = parseInt(trail, 10)
    let idx = base.indexOf(".")
    return idx == -1 ? 0 + elen : (base.length - idx - 1) + elen
  }
  let index = text.indexOf(".")
  return index == -1 ? 0 : (text.length - index - 1)
}