Cómo eliminar "px" de 245px

Respuestas:

182

Para convertir 245pxen 245 simplemente ejecute:

parseInt('245px', 10);

Conserva solo los números iniciales y descarta el resto.

Don
fuente
7
Esta es la forma más maleable, pero siempre debe especificar la raízparseInt('245px', 10)
Justin Johnson
Tienes razón: el valor predeterminado (extraño) es octal cuando la cadena comienza con '0' ... ¡Cuántas veces recibí un error parseInt('09')!
Don
4
¿Qué se hace cuando el valor es como 35,5 píxeles? El uso de parseInt daría como resultado solo 35
Muhammad Umer
5
@MuhammadUmer: puede usar 'parseFloat' ( w3schools.com/jsref/jsref_parsefloat.asp )
Don
38

utilizar

var size = parseInt('245px', 10);

donde 10 es la base que define el parseIntanálisis a un valor decimal

use parseInt pero no use parseInt sin una base

La función parseInt () analiza una cadena y devuelve un número entero.

La firma es parseInt(string, radix)

El segundo argumento obliga a parseInt a utilizar un sistema de numeración de base diez.

  • El tipo de entrada predeterminado para ParseInt () es decimal (base 10).
  • Si el número comienza en "0", se supone que es octal (base 8).
  • Si comienza en "0x", se supone que es hexadecimal.

¿por qué? si $ (this) .attr ('num') sería "08", parsInt sin una base se convertiría en 0

Caspar Kleijne
fuente
19

Para convertir un valor de píxel sin el "px" al final. use parseFloat.

parseFloat('245px'); // returns 245      

Nota: Si usa parseInt, el valor será correcto si el valor es un número entero. Si el valor es decimal como 245,50 px, entonces el valor se redondeará a 245.

Foreever
fuente
Como mi edición para hacer una precisión fue rechazada, voy a poner esto en un comentario, parseFloat()no toma radix como parseInt()(Ver developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… & stackoverflow.com/ preguntas / 8555649 /… )
Cera
16

Esto hace exactamente lo que pide: elimine los dos últimos caracteres de una cadena:

s.substr(0, s.length-2);
Jochem
fuente
5

Sorprendentemente, el método de la subcadena s.substr(0, s.length-2);es en realidad bastante más rápido para eliminar el px(sí, no tiene un aspecto tan limpio, y si hay un espacio, permanecerá - "250px" -> "250"vs "250 px" -> "250 ").

Si desea tener en cuenta los espacios (que probablemente debería hacerlo), el uso de la .trim()función en realidad ralentizará la substrprueba lo suficiente como para que el parseIntmétodo sea realmente superior.

Un beneficio adicional de usar parseInt(s, 10)es que también obtiene una conversión de tipo y puede comenzar a aplicarla inmediatamente a funciones matemáticas.

Entonces, al final, realmente depende de lo que planees hacer con el resultado.

  • Si solo se muestra, entonces usar el substrmétodo sin un recorte probablemente sea su mejor opción.
  • Si solo está tratando de ver si el valor sin px es el mismo que otro valor s.substr(0, s.length-2) == 0, entonces usar el substrmétodo sería lo mejor, ya que "250 " == 250(incluso con el espacio) resultará comotrue
  • Si desea tener en cuenta la posibilidad de un espacio, agregarlo a otro valor o calcular algo con él, entonces puede considerar seguir la parseIntruta.

http://jsperf.com/remove-px-from-coord

Las pruebas en jspref dan cuenta de un espacio. También probé una función s.split('px')[0]y s.replace(/ *px/g, ''), ambas resultaron ser más lentas.

No dude en agregar casos de prueba adicionales.

Kyle Shay
fuente
1

Aunque parseInt () es una buena opción, es bueno tener muchas otras soluciones

var pixels = '245px';
Number(pixels.replace('px', ''));
Shoaib Ahmad
fuente
0

Yo prefiero: "245px".replace(/px/,'')*1

ya que no rodea la entrada.

Además, *1es para convertirlo en int.

bArmageddon
fuente
0

substr()ahora es una función heredada ; use substring()en su lugar: (la sintaxis es la misma en este caso )

str.substring(0, str.length-2);

O use slice():

str.slice(0, -2);

slice()parece mucho más limpio, en mi opinión. Los valores negativos cuentan desde el final.

Elijah Mock
fuente
Sin embargo, es una función menos valiosa, ya que no se puede usar para remvalores.
Alan Shortis