我想在javascript上做一些功能,
收到一些数字和位置编号n
并返回其n
小数位。
即,
nthdigit(3.5852,2) = 8
nthdigit(3.5852,3) = 5
nthdigit(3.5852,5) = 0
nthdigit(9.772,1) = 7
我该如何正确地做到这一点?感谢。
答案 0 :(得分:3)
纯数学解决方案:
function decimaldigit(num, n) {
return Math.floor(num * Math.pow(10, n)) % 10;
}
答案 1 :(得分:0)
将数字转换为字符串,将其拆分为小数.
,取出所需字符并将其转换回数字。
function nthdigit(number, i) {
var afterDecimal = number.toString().split(".")[1];
return parseInt(afterDecimal.charAt(i-1));
}
我之所以选择charAt(i-1)
是因为字符从0
开始计算,在这种情况下,如果您希望将第一个数字放入1
,感觉会更自然。
答案 2 :(得分:0)
这应该很容易解决:
var nthdigit function(decimal, n)
{
var dec = '' + decimal; //convert to string
var decimalString = dec.split('.')[1]; //covert to array, take element with index [1]
var decimalPlaces = decimalSting.split(''); //covert to array
return parseInt(decimalPlaces( n-1 )); //1. decimalPlace has index 0
}
答案 3 :(得分:0)
另一种纯数学解决方案,具有更高的数字精度和正负数的正确处理:
function nthdigit(num, n) {
return n ? nthdigit((num % 1) * 10, n-1) : Math.trunc(num);
}
使用Math.trunc:
if (typeof Math.trunc != "function")
Math.trunc = function trunc(value) {
return value === 0 ? value : !isFinite(value) ? value : value | 0;
}