Pregunta

Por ejemplo, conseguir "5" en "256". Lo más cerca que he recibido es Math.floor (256/10)), pero que todavía va a regresar los números delante. ¿Hay alguna forma sencilla de conseguir lo que quieren o tendría que hacer una función grande para ella? Además, para mayor claridad: "n dígitos" sería definido. Ejemplo, getDigit (2256) volvería 5 (segundo dígito)

¿Fue útil?

Solución

Math.floor((256 / 10) % 10)

o más generalmente:

Math.floor(N / (Math.pow(10, n)) % 10)

donde N es el número a ser extraído, y n es la posición del dígito. En cuenta que esta cuenta de 0 a partir de la derecha (es decir, el dígito menos significativo = 0), y no da cuenta de valores no válidos de n.

Otros consejos

¿qué tal

(12345 + "")[3] 

o

(12345 + "").charAt(3)

a contar desde el otro extremo

[length of string - digit you want] por lo que si desea que el 2 de ella:

5 - 4 = 1 
(12345 + "")[1] = "2"


function getNumber (var num, var pos){
  var sNum = num + "";

  if(pos > sNum.length || pos <= 0){return "";}

  return sNum[sNum.length - pos]; 

}

En primer lugar, es necesario emitir el número en una cadena, entonces se puede acceder al carácter de lo más normal:

var num = 256;
var char = num.toString()[1]; // get the 2nd (0-based index) character from the stringified version of num

Editar Tenga en cuenta también que, si se quiere acceder a ella sin ajustar el número como una variable en primer lugar, se necesita un .. doble punto de acceso a la función:

var char = 256..toString()[1];

El primer punto dice al intérprete "este es un número"; el segundo acceso a la función.

Convertir a cadenas y de subcadenas (2,2)?

Esto debe hacerlo:

function getDigit ( position, number ) {
  number = number + ""; // convert number to string
  return number.substr ( position + 1, 1 ); // I'm adding 1 to position, since 0 is the position of the first character and so on
}

Prueba de esto, última línea es la clave:

var number = 12345;
var n = 2;
var nDigit = parseInt((number + '').substr(1,1));

Si quiere tratar de hacer todo lo que matemáticamente:

var number = 256;
var digitNum = 2;
var digit = ((int)(number/(Math.pow(10,digitNum-1))%10;

Este código cuenta el dígito de la derecha de partida con 1, 0. Si no desea cambiar para que se inicie a 0, -1 eliminar la parte en la convocatoria.

Si desea contar desde la izquierda, se vuelve más complicado y similar a otras soluciones:

var number = 256;
var digitNum = 2;
var digit = ((int)(number/(Math.pow(10,number.tostring().length-digitNum))%10;

editar

Además, esto supone que desea base 10 para su sistema de numeración, pero ambos de los que va a trabajar con otras bases. Todo lo que necesita hacer es cambiar las instancias de 10 en la última línea de código para el número que representa la base para el sistema de numeración desea utilizar. (Es decir. Hexadecimal = 16, binario = 2)

// You do not say if you allow decimal fractions or negative numbers- 
// the strings of those need adjusting.

Number.prototype.nthDigit= function(n){
    var s= String(this).replace(/\D+/g,'');
    if(s.length<=n) return null;
    return Number(s.charAt(n))
}

El uso variable "recuento" de lazo de control

var count = 1; //starting 1
for(i=0; i<100; i++){
  console.log(count);
  if(i%10 == 0) count++;
}

salida llenará 1 2 3 4 5 6 7 8 9

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top