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

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

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

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

先谢谢你!

编辑:

在修改了第一个问题的答案之后,我能想到的最快的解决办法是:

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

138888 次浏览
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(如果没有小数点,则返回0)。

如果你不想把它绑定到原型上,你可以这样做:

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

返回文章页面布莱克编辑:

我已经修正了这个方法,也使它适用于像 0.000000001这样的较小的数字

Number.prototype.countDecimals = function () {


if (Math.floor(this.valueOf()) === this.valueOf()) return 0;


var str = this.toString();
if (str.indexOf(".") !== -1 && str.indexOf("-") !== -1) {
return str.split("-")[1] || 0;
} else if (str.indexOf(".") !== -1) {
return str.split(".")[1].length || 0;
}
return str.split("-")[1] || 0;
}




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


var x = 0.0000000001;
console.log(x.countDecimals()); // 10


var x = 0.000000000000270;
console.log(x.countDecimals()); // 13


var x = 101;  // Integer number
console.log(x.countDecimals()); // 0

正则表达式在计算方面非常非常没有效率,如果你能换一种方式,它们就是卑鄙的。所以我会避开他们:)

像“ Number% 1”这样的东西返回四舍五入的小数值(2.3% 1 = 0.2999999999999999998) ,通常我会建议您尽早使用字符串,因为实数的近似值可以改变小数的数目。

你的很好,但我会想办法优化的。

编辑:

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

如果您希望代码不抛出整数错误,并且在没有小数时得到0的结果,请使用下面的代码添加到序列0one 答案中:

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