在JavaScript中获取数字中小数位数的最简单方法
Simplest way of getting the number of decimals in a number in 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
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.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
如果你想让代码不为整数抛出错误并在没有小数时得到0的结果,那么添加到序列中一个答案:
var countDecimals = function (value) {
if ((value % 1) != 0)
return value.toString().split(".")[1].length;
return 0;
};
Regex在计算中非常非常不高效,如果你可以换一种方式,它们是刻薄的。所以我会避开他们:)
像"数字%1"这样的东西会返回四舍五入的十进制值(2.3%1=0.29999999999998),一般来说,我建议您尽早使用字符串,因为实数的近似值会改变小数位数。
所以你的很好,但我会想办法优化它。
编辑:
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;
}
相关文章:
- JQuery:向多个匹配结果添加换行符的最简单方法
- 访问对象的最简单方法'的单独财产
- 什么'这是使用jQuery将一些文本锚定到外部链接的最简单方法
- 实施会员系统的最简单方法是什么
- 出错时更改文本字段边框的最简单方法
- JavaScript:获取第一个月前 6 个月的日期的最简单方法
- 在CreateJS中加载视频的最简单方法
- 使用JavaScript过滤从网页复制的文本的最简单方法
- 创建在Javascript和PHP之间使用的唯一代码的最简单方法
- 使用JS找出字符串中字符重复的最简单方法是什么
- 使选择框在URL中使用变量重新加载页面的最简单方法
- 在原始对象的基础上创建新对象的最简单方法,但没有几个字段
- 在HTML中记住用户区域设置选择的最简单方法
- 在Raphael JS中创建脉动(循环)背景的最简单方法
- 从jquery下载具有现有路径的文件的最简单方法
- 在 Javascript 中将对象连接为空格分隔字符串的最简单方法是什么?
- 什么'这是重定向不受支持的浏览器的最简单方法
- 管理形式状态的最简单方法是什么
- 创建响应图像的最简单方法是什么
- 在 JavaScript 中,将文本插入字符串的最简单方法是什么?