如何用Javascript计算实数的小数位数(不是数字)?
function countDecimals(number) {
}
例如,给定245.395,它应该返回3。
像这样:
var val = 37.435345;
var countDecimals = function(value) {
if (Math.floor(value) !== value)
return value.toString().split(".")[1].length || 0;
return 0;
}
countDecimals(val);
主要思想是将数字转换为字符串并获得索引“。”
var x = 13.251256;
var text = x.toString();
var index = text.indexOf(".");
alert(text.length - index - 1);
您可以使用一个简单的函数,在小数位(如果有的话)上进行拆分并在此之后计算数字。由于小数位可以用'。'表示。或者','(或者某些其他角色),你可以测试它并使用适当的:
function countPlaces(num) {
var sep = String(23.32).match(/\D/)[0];
var b = String(num).split(sep);
return b[1]? b[1].length : 0;
}
console.log(countPlaces(2.343)); // 3
console.log(countPlaces(2.3)); // 1
console.log(countPlaces(343.0)); // 0
console.log(countPlaces(343)); // 0
这是一个不依赖于将任何东西转换为字符串的方法:
function getDecimalPlaces(x,watchdog)
{
x = Math.abs(x);
watchdog = watchdog || 20;
var i = 0;
while (x % 1 > 0 && i < watchdog)
{
i++;
x = x*10;
}
return i;
}
请注意,计数不会超过watchdog
值(默认为20)。
var value = 888;
var valueLength = value.toString().length;
基于Gosha_Fighten的解决方案,为了与整数兼容:
function countPlaces(num) {
var text = num.toString();
var index = text.indexOf(".");
return index == -1 ? 0 : (text.length - index - 1);
}
基于LePatay的解决方案,还要考虑科学记数法(例如:3.7e-7)和es6语法:
function countDecimals(num) {
let text = num.toString()
if (text.indexOf('e-') > -1) {
let [base, trail] = text.split('e-')
let elen = parseInt(trail, 10)
let idx = base.indexOf(".")
return idx == -1 ? 0 + elen : (base.length - idx - 1) + elen
}
let index = text.indexOf(".")
return index == -1 ? 0 : (text.length - index - 1)
}