在JavaScript中获取数字中的小数位数的最简单方法

时间:2013-06-28 16:09:23

标签: javascript jquery numbers mootools decimal-point

有没有比我的例子更好的方法来计算数字的小数位数?

var nbr = 37.435.45;
var decimals = (nbr!=Math.floor(nbr))?(nbr.toString()).split('.')[1].length:0;

更好的是,我的意思是更快地执行和/或使用本机JavaScript函数,即。像nbr.getDecimals()。

提前致谢!

编辑:

修改series0ne答案后,我能管理的最快方式是:

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

速度测试:http://jsperf.com/checkdecimals

3 个答案:

答案 0 :(得分:55)

Number.prototype.countDecimals = function () {
    if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
    return this.toString().split(".")[1].length || 0; 
}

当绑定到原型时,这允许您直接从数字变量中获取十进制计数(countDecimals();)。

E.G。

var x = 23.453453453;
x.countDecimals(); // 9

它的工作原理是将数字转换为字符串,在处拆分并返回数组的最后一部分,如果数组的最后部分未定义,则为0(如果存在则会发生没有小数点。)

如果你不想将它绑定到原型,你可以使用它:

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

答案 1 :(得分:18)

如果你想让代码不为整数引起错误并且在没有小数时得到0的结果,则添加到series0ne回答:

var countDecimals = function (value) { 
    if ((value % 1) != 0) 
        return value.toString().split(".")[1].length;  
    return 0;
};

答案 2 :(得分:1)

正则表达式在计算方面效率非常高,如果你能采用另一种方式,它们就意味着它们。所以我会避免它们:)

像“数字%1”这样的东西会返回舍入的十进制值(2.3%1 = 0.2999999999999998),一般来说我会建议你尽早使用字符串,因为实数的近似可以改变数字小数。

所以你的很好,但我会找到一种方法来优化它。

编辑:

function CountDecimalDigits(number)
{
  var char_array = number.toString().split(""); // split every single char
  var not_decimal = char_array.lastIndexOf(".");
  return (not_decimal<0)?0:char_array.length - not_decimal;
}