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])