Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:从数字中获取第二个数字?_Javascript_Numbers - Fatal编程技术网

JavaScript:从数字中获取第二个数字?

JavaScript:从数字中获取第二个数字?,javascript,numbers,Javascript,Numbers,我给一个变量分配了一个数字,如下所示: var myVar = 1234; 现在我想从这个数字中得到第二个数字(本例中为2),而不首先将其转换为字符串。这是可能的吗?通过循环将数字除以10,直到数字小于100,从而去除尾随数字。然后对10进行模运算,得到第二个数字 if (x > 9) { while (x > 99) { x = (x / 10) | 0; // Use bitwise '|' operator to force integer resu

我给一个变量分配了一个数字,如下所示:

var myVar = 1234;

现在我想从这个数字中得到第二个数字(本例中为2),而不首先将其转换为字符串。这是可能的吗?

通过循环将数字除以10,直到数字小于100,从而去除尾随数字。然后对10进行模运算,得到第二个数字

if (x > 9) {
    while (x > 99) {
        x = (x / 10) | 0;  // Use bitwise '|' operator to force integer result.
    }
    secondDigit = x % 10;
}
else {
    // Handle the cases where x has only one digit.
}

因此,您需要从数字的十进制写入中获取第二位数字

最简单、最符合逻辑的解决方案是将其转换为字符串:

var digit = (''+myVar)[1];

如果您不想以简单的方式完成,或者如果您想要更高效的解决方案,您可以这样做:

var l = Math.pow(10, Math.floor(Math.log(myVar)/Math.log(10))-1);
var b = Math.floor(myVar/l);
var digit = b-Math.floor(b/10)*10;

对于那些对表演感兴趣的人,我做了一个演讲。对于随机数,像我一样使用日志是目前为止最快的解决方案。

一个“数字”是一回事

该数字的表示(例如,以10为基数的字符串“1234”)是另一回事

如果您想要十进制字符串中的特定数字。。。那么最好的办法就是从字符串中获取它:)

问:您知道Javascript中的整数算法存在缺陷,对吗

问:为什么不使用字符串如此重要?这是家庭作业吗?面试问题?

var newVar=myVar;
var newVar = myVar;
while (newVar > 100) {
    newVar /= 10;
}

if (newVar > 0 && newVar < 10) {
   newVar = newVar;
}

else if (newVar >= 10 && newVar < 20) {
   newVar -= 10;
}

else if (newVar >= 20 && newVar < 30) {
   newVar -= 20;
}

else if (newVar >= 30 && newVar < 40) {
   newVar -= 30;
}

else if (newVar >= 40 && newVar < 50) {
   newVar -= 40;
}

else if (newVar >= 50 && newVar < 60) {
   newVar -= 50;
}

else if (newVar >= 60 && newVar < 70) {
   newVar -= 60;
}

else if (newVar >= 70 && newVar < 80) {
   newVar -= 70;
}

else if (newVar >= 80 && newVar < 90) {
   newVar -= 80;
}

else if (newVar >= 90 && newVar < 100) {
   newVar -= 90;
}

else {
   newVar = 0;
}

var secondDigit = Math.floor(newVar);
while(newVar>100){ newVar/=10; } 如果(newVar>0&&newVar<10){ newVar=newVar; } 否则如果(newVar>=10&&newVar<20){ newVar-=10; } 否则如果(newVar>=20&&newVar<30){ newVar-=20; } 否则如果(newVar>=30&&newVar<40){ newVar-=30; } 否则如果(newVar>=40&&newVar<50){ newVar-=40; } 否则如果(newVar>=50&&newVar<60){ newVar-=50; } 否则如果(newVar>=60&&newVar<70){ newVar-=60; } 否则如果(newVar>=70&&newVar<80){ newVar-=70; } 否则如果(newVar>=80&&newVar<90){ newVar-=80; } 否则如果(newVar>=90&&newVar<100){ newVar-=90; } 否则{ newVar=0; } var第二位数=数学楼层(新var);
我就是这么做的:)

这里有一个JSFiddle显示了它的工作原理:)


这也是假设您的原始数字始终大于9。。。如果它不总是大于9,那么我猜你不会问这个问题;)

我不知道你为什么需要这个逻辑,但是下面的逻辑会给你第二个数字

<script type="text/javascript">
    var myVal = 58445456;
    var var1 = new Number(myVal.toPrecision(1));
    var var2 = new Number(myVal.toPrecision(2));     
    var rem;
    rem = var1 - var2;
    var multi = 0.1;
    var oldvalue;
    while (rem > 10) {
        oldvalue = rem;
        rem = rem * multi;
        rem = rem.toFixed();           
    }
    alert(10-rem);       
</script>

var myVal=58445456;
var var1=新编号(myVal.toPrecision(1));
var var2=新编号(myVal.toPrecision(2));
var-rem;
rem=var1-var2;
多元var=0.1;
风险价值;
而(rem>10){
oldvalue=rem;
rem=rem*多;
rem=rem.toFixed();
}
警惕(10雷姆);
函数getDigit(number,indexFromRight){
var maxNumber=9
对于(变量i=0;i最大数字){
number=number/Math.pow(10,indexFromRight-1)| 0
返回号码%10
}否则
返回0
}
函数getNthDigit(val,n){
//删除所有大于n的数字
var modVal=val%数学功率(10,n);
//删除所有小于N的数字
返回数学楼层(modVal/Math.pow(10,n-1));
}
//测验
[
0, 
1.
123, 
123456789, 
0.1, 
0.001
].map(v=>
console.log([
第n位数字(v,1),
第n位数字(v,2),
第n位数字(v,3)
]
) 

);你知道,我知道这个问题问的是如何在没有数字的情况下实现它,但标题“JavaScript:从数字中获取第二个数字?”意味着很多人在寻找获取特定数字句点的方法时会找到这个答案

我不是在抨击最初的提问者,我相信他/她有他们的理由,但从搜索实用性的角度来看,我认为在这里添加一个答案是值得的,它可以将数字转换为字符串并返回,因为,如果没有其他东西的话,这是一种更简洁、更容易理解的方式

let digit = Number((n).toString().split('').slice(1,1))

// e.g.
let digit = Number((1234).toString().split('').slice(1,1)) // outputs 2

不需要字符串转换就可以得到数字,但是当您试图编写清晰简洁的代码时,其他人和未来的用户都可以很快地看到并完全理解,我认为快速字符串转换一行是一种更好的方法

从右侧开始的第一位数字→ <代码>编号%10
=
数学楼层((编号/1)%10)

右起第二位数字→ <代码>数学楼层((数字/10)%10)

右起第三位数字→ <代码>数学楼层((数字/100)%10)

从右开始的第n位数字→ <代码>数学楼层((数字/10^n-1)%10)

数字中的位数→ <代码>数学最大值(数学楼层(数学日志10(数学abs(数字))),0)+1

n从左到右的数字位数

function getDigit(number, n, fromLeft) {
  const location = fromLeft ? getDigitCount(number) + 1 - n : n;
  return Math.floor((number / Math.pow(10, location - 1)) % 10);
}

这是一个简单的方法,可以从一个数字中以字符串或int形式获取任何特许权:

const myVar = 1234;
String(myVar).charAt(1)
//"2"
parseInt(String(myVar).charAt(1))
//2

这就是我如何处理递归的方法

function getDigits(n, arr=[]) {
   arr.push(n % 10)

   if (n < 10) {
     return arr.reverse()
   }
   return getDigits(Math.floor(n/10),arr)
  }

const arr = getDigits(myVar)
console.log(arr[2])
函数getDigits(n,arr=[]){ arr.push(n%10) 如果(n<10){ 返回arr.reverse() } 返回getDigits(数学楼层(n/10),arr) } 常量arr=getDigits(myVar) console.log(arr[2])
//var secondNumber=(myVar-1000)/100@BLOB我从未见过一个数字有小数部分;)为什么不将其转换为字符串?问题是如何在不首先转换为字符串的情况下进行转换。也许OP想要学习如何做数学。这并不能回答问题。@JohnKugelman是关于实际问题,而不是谜题。这就是为什么我首先用简单的解决方案来回答这个问题。现在我用一个不涉及到字符串转换的解决方案编辑。学习如何操作整数是非常实用的。你认为整数首先是如何转换成字符串的?另外,你的数学解为123456789生成
7
。@JohnKugelman我对数字较多的数字做了一个答案。参见最新版本的chrome(59),
Math.floor((1234 / 100) % 10); // 2
function getDigit(number, n) {
  return Math.floor((number / Math.pow(10, n - 1)) % 10);
}
function getDigitCount(number) {
  return Math.max(Math.floor(Math.log10(Math.abs(number))), 0) + 1;
}
function getDigit(number, n, fromLeft) {
  const location = fromLeft ? getDigitCount(number) + 1 - n : n;
  return Math.floor((number / Math.pow(10, location - 1)) % 10);
}
const myVar = 1234;
String(myVar).charAt(1)
//"2"
parseInt(String(myVar).charAt(1))
//2
function getDigits(n, arr=[]) {
   arr.push(n % 10)

   if (n < 10) {
     return arr.reverse()
   }
   return getDigits(Math.floor(n/10),arr)
  }

const arr = getDigits(myVar)
console.log(arr[2])