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

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

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

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

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

例如

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

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

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

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

像“Number%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; }