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

Phi*_*rep 29 javascript jquery mootools numbers decimal-point

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

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

更好的是,我的意思是更快地执行和/或使用本机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);
Run Code Online (Sandbox Code Playgroud)

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

ser*_*0ne 68

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

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

例如

var x = 23.453453453;
x.countDecimals(); // 9
Run Code Online (Sandbox Code Playgroud)

它的工作原理是将数字转换为字符串,然后将其拆分为.并返回数组的最后一部分,如果数组的最后一部分未定义则返回0(如果没有小数点则会出现).

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

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

  • 这将产生整数的错误:http://jsfiddle.net/3bQqV/但也许它不是OP的问题 (7认同)
  • 也会产生非常小的十进制数的错误。(例如 0.000000001)http://jsfiddle.net/yh2Lurf5/ (3认同)
  • 一些国家/地区使用逗号作为小数点分隔符,而不是句点。过去,我曾使用这种快速的“肮脏”检测技巧来解决该问题:`var isComma = Boolean(parseFloat(1/2).toString()。indexOf(“,”)!== -1); `您的最后一行将变成:`return value.toString()。split((isComma?“,”:“。”))[1] .length || 0;` (3认同)
  • 现在有了可选的链接可用,这可能会使函数更安全(例如 NaN) ```value.toString().split(".")[1]?.length || 0;``` https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Optionale_Verkettung (2认同)
  • 对于某些数字,例如 0.0000001,这种情况会被破坏。 (2认同)

Pet*_*e D 22

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

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

  • 可能更快像:`var countDecimals = function(value){return value%1?value.toString().split(".")[1] .length:0; };` (2认同)