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

use*_*596 39 javascript numbers

我有一个分配给变量的数字,如:

var myVar = 1234;
Run Code Online (Sandbox Code Playgroud)

现在我想从该数字得到第二个数字(在这种情况下为2),而不是先将其转换为字符串.那可能吗?

Den*_*ret 76

所以你想得到一个数字的十进制数字的第二个数字.

最简单和最合理的解决方案是将其转换为字符串:

var digit = (''+myVar)[1];
Run Code Online (Sandbox Code Playgroud)

要么

var digit = myVar.toString()[1];
Run Code Online (Sandbox Code Playgroud)

如果您不想这么做,或者如果您想要更有效的解决方案,您可以这样做:

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;
Run Code Online (Sandbox Code Playgroud)

示范

对于对表演感兴趣的人,我做了一个jsperf.对于使用日志的随机数,我所做的是迄今为止最快的解决方案.

  • @JohnKugelman SO关于**实际问题**,而不是谜题.这就是为什么我首先用简单的解决方案回答它.现在我编写了一个不涉及转换为字符串的解决方案. (8认同)
  • 问题是如何做**而不首先转换为字符串**.或许OP希望学习如何进行数学计算.这不回答这个问题. (6认同)
  • 学习如何操作整数是非常实用的.您如何看待整数首先转换为字符串?你的数学解也为123456789产生了"7". (5认同)

小智 23

右边第一个数字=数字%10 = Math.floor((数字/ 1)%10)

1234 % 10; // 4
Math.floor((1234 / 1) % 10); // 4
Run Code Online (Sandbox Code Playgroud)

右边第二个数字= Math.floor((数字/ 10)%10)

Math.floor((1234 / 10) % 10); // 3
Run Code Online (Sandbox Code Playgroud)

右边第三位数字= Math.floor((数字/ 100)%10)

Math.floor((1234 / 100) % 10); // 2
Run Code Online (Sandbox Code Playgroud)

右边第n个数字= Math.floor((数字/ 10 ^ n-1)%10)

function getDigit(number, n) {
  return Math.floor((number / Math.pow(10, n - 1)) % 10);
}
Run Code Online (Sandbox Code Playgroud)

数字中的位数= Math.max(Math.floor(Math.log10(Math.abs(number))),0)+ 1 //来自:https://stackoverflow.com/a/28203456/6917157

function getDigitCount(number) {
  return Math.max(Math.floor(Math.log10(Math.abs(number))), 0) + 1;
}
Run Code Online (Sandbox Code Playgroud)

从左或右数字的第n位数

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


Chr*_*itz 5

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

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

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

// e.g.
let digit = Number((1234).toString().split('').slice(1,1)) // outputs 2
Run Code Online (Sandbox Code Playgroud)

在不进行字符串转换的情况下获取数字很棒,但是当您尝试编写清晰简洁的代码以便其他人和未来的人可以快速查看并完全理解时,我认为快速字符串转换是一种更好的方法正在做。